[英]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_A
和Var_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.