微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 将多个字典组合成一个长格式的pandas数据帧

我有几个字典设置如下:

Dict1 = {'Orange': ['1', '2', '3', '4']}
Dict2 = {'Red': ['3', '4', '5']}

我希望输出一个组合数据帧:

| Type | Value |
|--------------|
|Orange|   1   |
|Orange|   2   |
|Orange|   3   |
|Orange|   4   |
| Red  |   3   |
| Red  |   4   |
| Red  |   5   |

我尝试将所有内容拆分,但我只在此数据帧中获得Dict2.

mydicts = [Dict1, Dict2]
for x in mydicts:
    for k, v in x.items():
        df = pd.DataFrame(v)
        df['Type'] = k

解决方法:

一种选择是使用pd.concat:

pd.concat(map(pd.DataFrame, mydicts), axis=1).melt().dropna()

  variable value
0   Orange     1
1   Orange     2
2   Orange     3
3   Orange     4
4      Red     3
5      Red     4
6      Red     5

如果性能很重要,您可以使用DataFrame.from_dict初始化单个DataFrame并融化:

pd.DataFrame.from_dict({**Dict1, **Dict2}, orient='index').T.melt().dropna()
  variable value
0   Orange     1
1   Orange     2
2   Orange     3
3   Orange     4
4      Red     3
5      Red     4
6      Red     5

或者,使用堆栈而不是熔化(稍慢,仅为了完整性):

res = (pd.DataFrame.from_dict({**Dict1, **Dict2}, orient='index').T
         .stack()
         .reset_index(level=1)
         .sort_values('level_1'))
res.columns = ['Type', 'Value']

print(res)
     Type Value
0  Orange     1
1  Orange     2
2  Orange     3
3  Orange     4
0     Red     3
1     Red     4
2     Red     5

字典解包语法适用于python3.6.在较旧的版本中,将{** d1,** d2}替换为{k:v代表d的mydicts中的d,代替d.items()}中的v.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐