开发者社区> 问答> 正文

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

可以将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

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

展开
收起
一码平川MACHEL 2019-01-23 13:17:19 4625 0
1 条回答
写回答
取消 提交回答
  • 使用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

    2019-07-17 23:26:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
中文:即学即用的Pandas入门与时间序列分析 立即下载
即学即用的Pandas入门与时间序列分析 立即下载
demystifying dataframe and dataset 立即下载