pandas - 根据条件计算熊猫数据框每一列的平均值(即averageifs)
问题描述
我不知道为什么我在这个问题上如此努力。我正在尝试在 pandas 数据框中进行与 averageifs calc 等效的 excel。
我有以下内容:
df = pd.DataFrame(rng.rand(1000, 7), columns=['1/31/2019', '2/28/2019', '3/31/2019', '4/30/2019', '5/31/2019', '6/30/2019', '7/31/2019'])
我还有一个专栏:
df['Doc_Number'] = ['A', 'B', 'C', 'B', 'C', 'B', 'A', 'A', 'D', 'G', 'G', 'D', 'G', 'B' ...]
我想在 df 的每一列上的 Doc_Number 上执行与 averageifs 等效的 excel,同时保持数据框的结构。所以在每一列中,我会计算 df['Doc_Number'] = ['A', 'B', 'C'...] 的平均值,但我仍然会保留 1,000 行并且我会应用计算到每个单独的列 ['1/31/2019'、'2/28/2019'、'3/31/2019' ...]。
对于单个列,我会执行以下操作:
df['AverageIfs'] = df.groupby('Doc_Number')['1/31/2019'].transform('np.mean')
但是如何将计算应用于 df 的每一列?实际上,我有更多的列可以应用计算。
我是一个完全的业余爱好者,所以感谢您提出我的问题。
解决方案
您可以['1/31/2019']
在 groupby 之后删除以将所有列处理为 new DataFramme
,更改列名称add_suffix
并添加到原始 by join
:
#simplify df for easy check output
np.random.seed(123)
df = pd.DataFrame(np.random.rand(14, 2), columns=['1/31/2019', '2/28/2019'])
df['Doc_Number'] = ['A', 'B', 'C', 'B', 'C', 'B', 'A', 'A', 'D', 'G', 'G', 'D', 'G', 'B']
print (df)
1/31/2019 2/28/2019 Doc_Number
0 0.696469 0.286139 A
1 0.226851 0.551315 B
2 0.719469 0.423106 C
3 0.980764 0.684830 B
4 0.480932 0.392118 C
5 0.343178 0.729050 B
6 0.438572 0.059678 A
7 0.398044 0.737995 A
8 0.182492 0.175452 D
9 0.531551 0.531828 G
10 0.634401 0.849432 G
11 0.724455 0.611024 D
12 0.722443 0.322959 G
13 0.361789 0.228263 B
df = df.join(df.groupby('Doc_Number').transform('mean').add_suffix('_mean'))
print (df)
1/31/2019 2/28/2019 Doc_Number 1/31/2019_mean 2/28/2019_mean
0 0.696469 0.286139 A 0.511029 0.361271
1 0.226851 0.551315 B 0.478146 0.548364
2 0.719469 0.423106 C 0.600200 0.407612
3 0.980764 0.684830 B 0.478146 0.548364
4 0.480932 0.392118 C 0.600200 0.407612
5 0.343178 0.729050 B 0.478146 0.548364
6 0.438572 0.059678 A 0.511029 0.361271
7 0.398044 0.737995 A 0.511029 0.361271
8 0.182492 0.175452 D 0.453474 0.393238
9 0.531551 0.531828 G 0.629465 0.568073
10 0.634401 0.849432 G 0.629465 0.568073
11 0.724455 0.611024 D 0.453474 0.393238
12 0.722443 0.322959 G 0.629465 0.568073
13 0.361789 0.228263 B 0.478146 0.548364
推荐阅读
- javascript - 如何使用 apify sdk 使 puppeteer 无头运行?
- c# - 写入 Xamarin 预填充数据库
- c# - 如果 http 内容是二进制文件,Azure 函数不接受带有拉丁字符的标头
- c# - 如何在 ActiveReports 的 SubReport 中绘制矩形?
- python - 如何在 anaconda 下的 Mac 上安装 pandas 1.1.0 并通过 conda 挂在“解决环境”上
- javascript - Typescript 通过带有类型检查的构造函数传递字段
- ios - Xcode 12.0.1 屏幕截图仅在 iOS 模拟器上捕获主屏幕
- css - 突出显示父导航元素
- python - tensorflow-gpu ValueError:未知层:功能
- c++ - 从 CreateProcess 运行 CMake 会返回 FileTracker FTK0001 错误