按N列或N行分组的DataFrame

luc*_*uca 2 python pandas pandas-groupby

我想找到一种通用解决方案,以指定数量的行或列对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
Run Code Online (Sandbox Code Playgroud)

例如,我想一次按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
Run Code Online (Sandbox Code Playgroud)

按时间预期输出按2列分组:

   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
Run Code Online (Sandbox Code Playgroud)

luc*_*uca 5

按N行分组

>>> N=2

>>> df.reset_index(drop=True).groupby(by=lambda x: x/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
Run Code Online (Sandbox Code Playgroud)

或这个:

>>> 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
Run Code Online (Sandbox Code Playgroud)

按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
Run Code Online (Sandbox Code Playgroud)