繁体   English   中英

熊猫为每列/行应用不同的arg

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

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