按照N个列或N个行对DataFrame进行分组

5

我希望能够找到一种通用的解决方案,以指定的行或列数对DataFrame进行分组。 以下是一个示例DataFrame:

df = pd.DataFrame(0, index=['a', 'b', 'c', 'd', 'e', 'f'], columns=['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'])

   c1  c2  c3  c4  c5  c6  c7
a   0   0   0   0   0   0   0
b   0   0   0   0   0   0   0
c   0   0   0   0   0   0   0
d   0   0   0   0   0   0   0
e   0   0   0   0   0   0   0
f   0   0   0   0   0   0   0

例如,我想每次以2行为一组分组,并应用诸如平均值或类似函数。我还想知道如何以N列为一组进行分组并应用函数。
以每次2行为一组分组的预期输出:
   c1  c2  c3  c4  c5  c6  c7
0   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0
2   0   0   0   0   0   0   0

按照两列进行分组,期望输出:

   0  1  2  3
a  0  0  0  0
b  0  0  0  0
c  0  0  0  0
d  0  0  0  0
e  0  0  0  0
f  0  0  0  0
1个回答

11

这按N行分组

>>> N=2

>>> df.groupby(np.arange(len(df.index))//N, axis=0).mean()
   c1  c2  c3  c4  c5  c6  c7
0   0   0   0   0   0   0   0
1   0   0   0   0   0   0   0
2   0   0   0   0   0   0   0

按照 N 列进行分组

>>> df.groupby(np.arange(len(df.columns))//N, axis=1).mean()
   0  1  2  3
a  0  0  0  0
b  0  0  0  0
c  0  0  0  0
d  0  0  0  0
e  0  0  0  0
f  0  0  0  0

1
重置列之后,使用 df.groupby(by=lambda x: x/N, axis=1).mean() 中的 axis 来按列分组。 - Zero
1
Luca,我说过要重置列 df.columns = range(0, len(df.columns)) 吗?然后应用 df.groupby(by=lambda x: x/N, axis=1).mean() - Zero
1
请参见 https://dev59.com/GVoV5IYBdhLWcg3wA66x,`np.arange` 在列上也是有效的(您需要将其更改为df.groupby(np.arange(len(df.columns))//N, axis=1))。 - ayhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接