2016-08-24 51 views
0

有一个数据帧df_F1:赛区二等数据框与集团由列熊猫

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 

我尝试创建一个数据帧每个class_energy包含每个A的能量值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) 我得到一个没有class_energy列的数据框,你知道为什么吗? – Poisson

+1

这是因为您只使用整个'dataframe'的一个子集并仅对这些值进行更改。如果您希望'df_​​ratio'包含所有列,您可以将其分配为'df_ratio = df_F1'。现在,'df_ratio'获得'df_F1'之前的所有列。 –