繁体   English   中英

根据 pandas 中其他列中的值计算列均值

[英]Calculating column means based on values in other columns in pandas

我有一个 pandas dataframe 布局如下:

[Name_Date]          [Var_A]     [Var_1]    [Var_2]   ...
FooBar_09/2021          9           1          9
FooBar_09/2021          5           2          8
FooBar_09/2021          3           5          6
BarFoo_03/2020          8           3          2      
BarFoo_03/2020          3           4          4      ...
BarFoo_03/2020          4           3          6
BarBar_04/2017          3           1          5
BarBar_04/2017          7           1          3
BarBar_04/2017          1           3          1      ...

我想创建一个新的 dataframe,其具有来自 [Name_Date] 的唯一值,以及基于 [Name_Date] 中的组的来自 [Var_A] 的平均值。 我已经通过以下行做到了这一点:

df_mean = df.groupby('Name_Date', as_index=False)['Var_A'].mean()

然后我想做的是通过计算列 [Var1] 和 [Var2] 的平均值并将它们除以 [Var_A] 的平均值来扩展这一点。 我确信我可以以与上一行类似的方式逐一进行此计算,但是我有大约十几个这样的 [Var] 列,因此如果有人可以进行任何操作,我正在寻找一种更快捷的方法来执行此操作建议。 我试图达到的最终结果如下所示:

[Name_Date]        [Var_A_mean]   [mean Var_A / mean Var_1]   [mean Var_A / mean Var_2]
FooBar_09/2021         5.6               0.47                     1.3   
BarFoo_03/2020          5                0.66                     0.8
BarBar_04/2017         3.6               0.46                     0.83

谢谢您的帮助。

使用groupby计算所有列的平均值,然后在索引轴上div

df_mean = df.groupby('Name_Date').mean()
df_mean.update(df_mean.iloc[:, 1:].div(df_mean['Var_A'], axis=0))
print(df_mean)

# Output:
                   Var_A     Var_1     Var_2
Name_Date                                   
BarBar_04/2017  3.666667  0.454545  0.818182
BarFoo_03/2020  5.000000  0.666667  0.800000
FooBar_09/2021  5.666667  0.470588  1.352941

您可以简单地获取所有 3 列的平均值,然后计算 div 并重命名它们:

PS,根据结果编号,它似乎是Var_1 / Var_AVar_2 / Var_A ,这与您提供的名称不同

df_mean = df.groupby('Name_Date', as_index=False)[['Var_A', 'Var_1', 'Var_2']].mean()
df_mean['Var_1'] = df_mean['Var_1']/df_mean['Var_A']
df_mean['Var_2'] = df_mean['Var_2']/df_mean['Var_A']
df_mean.columns = ['Name_Date', 'Var_A_mean','mean Var_A / mean Var_1', 'mean Var_A / mean Var_2']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM