【问题标题】:groupby DataFrame by N columns or N rows [closed]按 N 列或 N 行分组的 DataFrame [关闭]
【发布时间】:2018-03-10 18:00:50
【问题描述】:

我想找到一个按指定数量的行或列对 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

按 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

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    按 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
    

    或者这个:

    >>> 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
    

    【讨论】:

    • 重置列后,使用df.groupby(by=lambda x: x/N, axis=1).mean()中的axis按列分组。
    • 卢卡,我说重置列df.columns = range(0, len(df.columns))?然后申请df.groupby(by=lambda x: x/N, axis=1).mean()
    • See stackoverflow.com/questions/36810595/… np.arange 对列也有效(您可以将其更改为 df.groupby(np.arange(len(df.columns))//N, axis=1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2013-12-27
    • 2011-11-08
    • 2019-07-20
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多