[英]pandas apply with different arg for each column/row
假设我有一个M(行)乘N(列)的dataFrame
df = pandas.DataFrame([...])
和长度为N的向量
windows = [1,2,..., N]
我想将移动平均函数应用于df
每一列,但希望每一列的移动平均值具有不同的长度(例如column1的MA长度为1,第2列的MA长度为2,以此类推)-这些长度都包含在内在windows
是否有内置功能可以快速执行此操作? 我知道df.apply(lambda a: f(a), axis=0, args=...)
但不清楚如何为每列应用不同的args
这是一种实现方法:
In [15]: dfrm
Out[15]:
A B C
0 0.948898 0.587032 0.131551
1 0.385582 0.275673 0.107135
2 0.849599 0.696882 0.313717
3 0.993080 0.510060 0.287691
4 0.994823 0.441560 0.632076
5 0.711145 0.760301 0.813272
6 0.932131 0.531901 0.393798
7 0.965915 0.812821 0.287819
8 0.782890 0.478565 0.960353
9 0.908078 0.850664 0.912878
In [16]: windows
Out[16]: [1, 2, 3]
In [17]: pandas.DataFrame(
{c: dfrm[c].rolling(windows[i]).mean() for i, c in enumerate(dfrm.columns)}
)
Out[17]:
A B C
0 0.948898 NaN NaN
1 0.385582 0.431352 NaN
2 0.849599 0.486277 0.184134
3 0.993080 0.603471 0.236181
4 0.994823 0.475810 0.411161
5 0.711145 0.600931 0.577680
6 0.932131 0.646101 0.613049
7 0.965915 0.672361 0.498296
8 0.782890 0.645693 0.547323
9 0.908078 0.664614 0.720350
正如@Manish Saraswat在评论中提到的,您还可以表达与dfrm[c].rolling_mean(windows[i])
。 此外,如果需要,您可以将序列用作windows
的项目,它们将表示自定义窗口形状(大小和权重),或具有不同rolling
聚合和关键字的任何其他选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.