【问题标题】:Division of two dataframe with Group by of a Column Pandas使用列 Pandas 的 Group by 划分两个数据框
【发布时间】:2016-12-31 07:36:59
【问题描述】:

我有一个数据框 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 的每个 ACT_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)

有什么想法可以帮帮我吗?

【问题讨论】:

    标签: python pandas dataframe group-by


    【解决方案1】:

    您可以使用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 
    

    【讨论】:

    • 当我做 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 列的数据框,你知道为什么吗?
    • 那是因为您只使用了整个dataframe 的一个子集,并且只对这些值进行了更改。如果您希望df_ratio 包含所有列,您可以将其指定为df_ratio=df_F1。现在,df_ratio 获得了 df_F1 之前拥有的所有列。
    猜你喜欢
    • 2014-04-08
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 2021-10-01
    相关资源
    最近更新 更多