Python 中 DataFrame 列的平均值

Averages of DataFrame columns in Python

由于我的声誉不够高,我无法对原始问题发表评论,但我参考了这个问题,特别是这行代码:

dfgrp= df.iloc[:,2:].groupby((np.arange(len(df.iloc[:,2:].columns)) // 2) + 1, axis=1).mean().add_prefix('ColumnAVg')

正如我所读的那样,从第 2 列开始获取所有行,按相同行和列的长度分组 一些东西 在列上,而不是在行上,得到平均值然后将这些列添加到名为 ColumnAVg1/2/3 等的新列中

我也知道这取第 1&2、3&4、5&6 等列的平均值,但我不知道它是如何计算的。

所以我的问题是,需要在上面的代码中更改哪些内容才能获得 1&2、2&3、3&4、4&5 等列的平均值且结果格式相同?

所以很遗憾,您无法更改该代码来获得结果,因为它通过为每一列分配一个数字并将它们组合在一起来实现它的功能。但是,您可以做一些厚颜无耻的事情。只需提供 2 个分组,获取每个分组的平均值并将它们组合成一个帧。

df = pd.DataFrame(np.random.randn(2, 4), columns=['a', 'b', 'c', 'd'])

d1 = df.groupby((np.arange(len(df.columns)) // 2), axis=1).mean()
d2 = df.groupby((np.arange(len(df.columns) + 1) // 2)[1:], axis=1).mean()

dfo = pd.DataFrame()
for i in range(len(df.columns)-1):
    c = f'average_{df.columns[i]}_{df.columns[i+1]}'
    if i % 2 == 0:
        dfo[c] = d1[d1.columns[i / 2]]
    else:
        dfo[c] = d2[d2.columns[(i+1) / 2]]

他所做的是将列 1,2,3,4 分配给 1,1,2,2。所以在我们的代码中,我们根据 1,1,2,2 分配了 d1,根据 0,1,1,2 分配了 d2。 for循环就是把结果合并起来。

df     = pd.DataFrame(np.random.randn(2, 4), columns=['a', 'b', 'c', 'd'])
groups = [(1,2),(2,3),(2,3,4),(1,3)]
df2    = pd.DataFrame([df.iloc[:, i - 1] for z in groups for i in z]).T
labels = [str(z) for z in groups for _ in z]
result = df2.groupby(by=labels, axis=1).mean()

可能不是您要找的东西,但像这样的东西应该有用。