2016-08-24 67 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'之前的所有列。 –