【问题标题】:How to turn a Pandas Dataframe into a Dictionary of Dataframes by grouping columns如何通过分组列将 Pandas 数据框转换为数据框字典
【发布时间】:2021-05-02 17:56:05
【问题描述】:

我有一个由 3D 数据构建并采用以下形式的 DataFrame:

索引:A、B

:1.a、1.b、2.a、2.b

我正在尝试将其解压缩到字典中,将 {A, B} 映射到具有索引 {1,2} 和列 {a,b} 的 DataFrames

示例输入:

aa = pandas.DataFrame({'1.a':[1,2], '1.b':[3,4], '2.a':[5,6], '2.b':[7,8], 'index':['A', 'B']}).set_index('index')

目标输出:

bb = {'A': pandas.DataFrame({'a':[1,5], 'b':[3,7], 'index':[1,2]}), 'B': pandas.DataFrame({'a':[2,6], 'b':[4,8], 'index':[1,2]}) }

有什么想法吗?

【问题讨论】:

  • {k:v for k,v in df.groupby(level=0)}?
  • 关闭但不能正确处理新的数据帧。 A 映射到解决方案中的原始行,而不是新的非平面数据框

标签: python pandas dataframe dictionary pandas-groupby


【解决方案1】:

看起来您可以将列名更改为 MultiIndex 并取消堆叠:

aa.columns = pd.MultiIndex.from_tuples([a.split('.') for a in aa.columns])

out = {k:v.unstack() for k,v in aa.iterrows()}

输出:

{'A':    a  b
 1  1  3
 2  5  7,
 'B':    a  b
 1  2  4
 2  6  8}

【讨论】:

  • 太棒了!这就是我需要的。谢谢@Quang Hoang
【解决方案2】:

拆分列并转换为MultiIndex;堆叠创建字典后MultiIndex索引第一级的groupby

aa.columns = aa.columns.str.split(".", expand=True)
aa = aa.stack(level=0).rename_axis([None, "index"])
index = aa.index.get_level_values(0)
dict(list(aa.droplevel(0).groupby(index)))

{'A':        a  b
 index      
 1      1  3
 2      5  7,
 'B':        a  b
 index      
 1      2  4
 2      6  8}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-18
    • 2014-06-12
    • 1970-01-01
    • 2019-02-22
    • 2017-07-16
    • 2020-12-22
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多