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