【问题标题】:how to apply a custom function to multiple columns pandas?如何将自定义函数应用于多列熊猫?
【发布时间】:2018-09-17 23:16:20
【问题描述】:
提前道歉,我假设有人问过这个问题,但我找不到很快。
我有大约 10 列名称为 'col 1'、'col 2'、'col 3' ...
我想对它们中的每一个应用以下函数,并且输出应该具有基列名称 + 'avg'。
df['col 1 avg'] = df['col 1'].rolling(5).mean()
我可以想到循环抛出列,但我不知道如何以最简单的方式做到这一点。感谢您的帮助!
【问题讨论】:
标签:
python
pandas
function
dataframe
apply
【解决方案1】:
您可以使用以下方法获取每列的滚动平均值:
df.rolling(5).mean()
然后,您可以使用add_suffix 将mean 添加到所有列名:
df.rolling(5).mean().add_suffix(' mean')
最后,您可以使用 pd.concat 与原始数据框连接。一步到位:
new_df = pd.concat((df, df.rolling(5).mean().add_suffix(' mean')),axis=1)
示例:
>>> df
col 0 col 1 col 2
0 1 2 1
1 4 0 0
2 4 2 2
3 4 3 4
4 3 1 0
5 4 2 3
6 2 2 2
7 2 1 0
8 2 2 2
9 2 3 0
>>> new_df = pd.concat((df, df.rolling(5).mean().add_suffix(' mean')),axis=1)
>>> new_df
col 0 col 1 col 2 col 0 mean col 1 mean col 2 mean
0 1 2 1 NaN NaN NaN
1 4 0 0 NaN NaN NaN
2 4 2 2 NaN NaN NaN
3 4 3 4 NaN NaN NaN
4 3 1 0 3.2 1.6 1.4
5 4 2 3 3.8 1.6 1.8
6 2 2 2 3.4 2.0 2.2
7 2 1 0 3.0 1.8 1.8
8 2 2 2 2.6 1.6 1.4
9 2 3 0 2.4 2.0 1.4