开发者社区> 问答> 正文

Pandas将groupby堆叠到DataFrame MultiIndex而不进行聚合

一码平川MACHEL 2019-01-23 13:17:19 669

可以将groupby对象转换为DataFrame 而不进行聚合,其中组名称变为MultiIndex的0级?这个过程可以迭代吗?

from pandas import DataFrame as DF

df = DF.from_dict({'a':1, 'b':2, 'c':3, 'd':4, 'e':5}, orient='index')
想要分组的输出:

df.groupby(lambda x: df0%2)
转换为这种形式:

DF.from_dict({0:{'b':2,'d':4},1:{'a':1,'c':3,'e':5}},orient='index').stack().to_frame()
ROW59

(除了这一点,为什么值转换为浮点数?)

Python
分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:34

    使用pd.concat,它接受字典:

    pd.concat({k: v for k, v in df.groupby(lambda x: df.loc[x, 0] % 2)})

     0

    0 b 2
    d 4
    1 a 1
    c 3
    e 5
    迭代每个组并构建您的字典。可以使用字典理解来构造字典。

    一个稍微快一点的解决方案,不涉及可调用,可以使用,

    pd.concat({k: v for k, v in df.groupby(df.iloc[:,0] % 2)})

     0

    0 b 2
    d 4
    1 a 1
    c 3
    e 5
    如果需要,可以尝试一下这个功能,

    def add_level(df, grouper):

    return pd.concat({k: v for k, v in df.groupby(by=grouper)})
    

    r = add_level(df, df.iloc[:,0] % 3)
    add_level(r, r.iloc[:, 0] % 2)

       0

    0 1 d 4
    2 b 2
    1 0 c 3
    1 a 1
    2 e 5

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题