我想创建多个列,以显示分组列的逐行累积平均值。以下是一些样本数据:
import pandas as pd
data = [[1, 4, 6, 10, 15, 40, 90, 100], [2, 5, 3, 11, 25, 50, 90, 120], [3, 7, 9, 14, 35, 55, 100, 120]]
df = pd.DataFrame(data, columns=['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4'])
a1 a2 a3 a4 b1 b2 b3 b4
0 1 4 6 10 15 40 90 100
1 2 5 3 11 25 50 90 120
2 3 7 9 14 35 55 100 120
我希望生成如下所示的新专栏:
- 新列
a1_2
按行计算列a1
和a2
的平均值。 - 新列
a1_3
按列a1
、a2
和a3
的行的平均值计算。 - 新列
a1_4
按列a1
、a2
、a3
和a4
的行的平均值计算。
对于包含b
的分组列也应该发生同样的情况。当然,您可以手动执行此操作,但当您的变量太多时,这样做并不理想。以下是预期输出:
df['a1_2'] = df[['a1', 'a2']].mean(axis=1)
df['a1_3'] = df[['a1', 'a2', 'a3']].mean(axis=1)
df['a1_4'] = df[['a1', 'a2', 'a3', 'a4']].mean(axis=1)
df['b1_2'] = df[['b1', 'b2']].mean(axis=1)
df['b1_3'] = df[['b1', 'b2', 'b3']].mean(axis=1)
df['b1_4'] = df[['b1', 'b2', 'b3', 'b4']].mean(axis=1)
a1 a2 a3 a4 b1 b2 b3 b4 a1_2 a1_3 a1_4 b1_2 b1_3 b1_4
0 1 4 6 10 15 40 90 100 2.5 3.666667 5.25 27.5 48.333333 61.25
1 2 5 3 11 25 50 90 120 3.5 3.333333 5.25 37.5 55.000000 71.25
2 3 7 9 14 35 55 100 120 5.0 6.333333 8.25 45.0 63.333333 77.50
所以我想知道有没有某种自动的方法来做这件事?
1条答案
按热度按时间nxowjjhe1#
IIUC,您可以使用
wide_to_long
重塑,执行groupby.rolling
,然后执行unstack
并展平多索引:输出: