我有一个这样的数据框:
import pandas as pd
df = pd.DataFrame({'A_1': [1, 2], 'A_2': [3, 4], 'A_3': [5, 6], 'A_4': [7, 8],
'B_1': [0, 2], 'B_2': [4, 4], 'B_3': [9, 6], 'B_4': [5, 8]})
A_1 A_2 A_3 A_4 B_1 B_2 B_3 B_4
0 1 3 5 7 0 4 9 5
1 2 4 6 8 2 4 6 8
我想将其转换成如下所示的数据框:
A_G1 A_G2 B_G1 B_G2
0 2 6 2 7
1 3 7 3 7
因此,A_G1
是 A_1
和 A_2
列的平均值
,A_G2
是 A_3
和 A_4
列的平均值
;这同样适用于 B_G1
和 B_G2
。所以我想做的是计算两个连续列的平均值,并将结果作为新列添加到数据框中。
一个简单的实现看起来像这样:
res_df = pd.DataFrame()
for i in range(0, len(df.columns), 2):
temp_df = df[[i, i + 1]].mean(axis=1)
res_df = pd.concat([res_df, temp_df], axis=1)
这给了我想要的输出(列名除外):
0 0 0 0
0 2 6 2 7
1 3 7 3 7
有没有更好的方法,即矢量化方法?
最佳答案
这可能对你有用:
In [15]: df.rolling(window=2,axis=1).mean().iloc[:,1::2]
Out[15]:
A_2 A_4 B_2 B_4
0 2.0 6.0 2.0 7.0
1 3.0 7.0 3.0 7.0
但我还没有针对您的“直接”实现对其进行测试。
关于python - 如何计算连续n列的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40725188/