python - 如何计算连续n列的平均值?

标签 python performance pandas optimization vectorization

我有一个这样的数据框:

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_G1A_1A_2 列的平均值A_G2A_3A_4 列的平均值;这同样适用于 B_G1B_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/

相关文章:

java - 反射运行时性能 - Java 与 CLR

python - dataframe.stack() 返回的数据集是什么

python - 添加两个 boolean 数据框

python - 使用 Python 将列表值传递给 MySQL 查询

python - pymongo 更新不起作用

python - 使用 python-chess 库打印单个 Action

performance - MDX - 非空的大型交叉连接 - 如何优化性能

java - 如何提高客户端-服务器架构应用程序的性能?

sql - 在 SQL 中实现 qcut 以创建新列

python - 将 pandas DataFrame 中的相同连续值分组