pandas对每个列/行应用不同的arg

时间:2018-03-07 19:55:07

标签: python pandas rolling-computation rolling-average

假设我有N(列)dataFrame

的M(行)
ExecuteWithReflection("Hello");
ExecuteWithReflection("Run","Vinod");
ExecuteWithReflection("TestNoParameters");
ExecuteWithReflection("Execute",new object[]{"Vinod","Srivastav"});

和长度为N的载体

df = pandas.DataFrame([...])

我想将移动平均函数应用于windows = [1,2,..., N] 中的每一列,但希望移动平均值对每列具有不同的长度(例如,column1的MA长度为1,第2列的MA长度为2,等) - 这些长度包含在df

是否有内置功能可以快速完成此操作?我知道windows但不清楚如何为每列应用不同的args

1 个答案:

答案 0 :(得分:1)

这是一种方法:

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聚合和关键字的任何其他选项。