2016-08-24 2 views
0

У меня есть dataframe df_F1:Разделения два dataframe с Группой по колонкам с пандой

df_F1.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 2 entries, 0 to 1 
Data columns (total 7 columns): 
class_energy    2 non-null object 
ACT_TIME_AERATEUR_1_F1 2 non-null float64 
ACT_TIME_AERATEUR_1_F3 2 non-null float64 
ACT_TIME_AERATEUR_1_F5 2 non-null float64 
ACT_TIME_AERATEUR_1_F8 2 non-null float64 
ACT_TIME_AERATEUR_1_F7 2 non-null float64 
ACT_TIME_AERATEUR_1_F8 2 non-null float64 
dtypes: float64(6), object(1) 
memory usage: 128.0+ bytes 
df_F1.head() 
class_energy ACT_TIME_AERATEUR_1_F1 ACT_TIME_AERATEUR_1_F3 ACT_TIME_AERATEUR_1_F5 
low 5.875550 431.000000 856.666667 
medium 856.666667 856.666667 856.666667 

Я пытаюсь создать dataframe Соотношение, которое содержит для каждого класса значение энергии энергии каждого А CT_TIME_AERATEUR_1_Fx делится на сумму энергии всех ACT_TIME_AERATEUR_1_Fx. Например:

  ACT_TIME_AERATEUR_1_F1 ACT_TIME_AERATEUR_1_F3 ACT_TIME_AERATEUR_1_F5 
low  5.875550/(5.875550 + 431.000000+856.666667) 431.000000/(5.875550+431.000000+856.666667) 856.666667/(5.875550+431.000000+856.666667) 
medium  856.666667/(856.666667+856.666667+856.666667) 856.666667/(856.666667+856.666667+856.666667) 856.666667/(856.666667+856.666667+856.666667) 

Любые идеи, пожалуйста, чтобы помочь мне?

Спасибо

Сердечные приветы

ответ

2

Вы можете использовать DF.divide разделить необходимые столбцы с их sum вдоль тех же столбцов, как показано:

df.iloc[:,1:4] = df.iloc[:,1:4].divide(df.sum(axis=1), axis=0) 
print(df) 

    class_energy ACT_TIME_AERATEUR_1_F1 ACT_TIME_AERATEUR_1_F3 \ 
0   low    0.004542    0.333194 
1  medium    0.333333    0.333333 

    ACT_TIME_AERATEUR_1_F5 
0    0.662264 
1    0.333333 
+1

Спасибо NickilMaveli, это работает !! С уважением – Poisson

+0

, когда я делаю df_Ratio = df_F1.loc [:, "ACT_TIME_AERATEUR_1_F1": "ACT_TIME_AERATEUR_1_F5"] = df_F1.loc [:, "ACT_TIME_AERATEUR_1_F1": "ACT_TIME_AERATEUR_1_F5"]. Divide (df_F1.sum (axis = 1), axis = 0) Я получаю dataframe без столбца class_energy, вы знаете, почему? – Poisson

+1

Это потому, что вы используете только подмножество всего «dataframe» и вносите изменения только в эти значения. Если вы хотите, чтобы 'df_ratio' включал все столбцы, вы можете назначить его как' df_ratio = df_F1'. И теперь, 'df_ratio' получает все столбцы, которые раньше были' df_F1'. –

Смежные вопросы