python - Pandas:Groupby 并使用剩余的列名和值创建字典
问题描述
下面是我的df
:
In [425]: df
Out[425]:
a b c d
0 abc 1 1 True
1 abd 1 1 False
2 abe 1 2 False
3 abf 1 2 True
4 abg 2 2 True
我想对列进行分组b
并c
使用剩余的列名及其值创建 dict。
预期输出:
[
{
"b": 1,
"c": 1,
"attr":[
{
"a": "abc",
"d": True
},
{
"a": "abd",
"d": False
}
]
},
{
"b": 1,
"c": 2,
"attr":[
{
"a": "abe",
"d": False
},
{
"a": "abf",
"d": True
}
]
},
{
"b": 2,
"c": 2,
"attr":[
{
"a": "abg",
"d": True
}
]
}
]
我的尝试:
In [423]: df.set_index(['b', 'c']).agg(list, 1).to_dict()
Out[423]: {(1, 1): ['abd', False], (1, 2): ['abf', True], (2, 2): ['abg', True]}
我能够分组和创建字典,但不知道如何将列名与它一起放置。
解决方案
理解
[dict(b=b, c=c, attr=d.to_dict('records'))
for (b, c), d in df.set_index(['b', 'c']).groupby(['b', 'c'])]
[{'b': 1, 'c': 1, 'attr': [{'a': 'abc', 'd': True}, {'a': 'abd', 'd': False}]},
{'b': 1, 'c': 2, 'attr': [{'a': 'abe', 'd': False}, {'a': 'abf', 'd': True}]},
{'b': 2, 'c': 2, 'attr': [{'a': 'abg', 'd': True}]}]
推荐阅读
- java - 从 Maven、Tomcat、jax-rs、Jersey 项目中分离前端代码
- amazon-web-services - AWS Cognito 中的自定义电话验证?
- c++ - 找到循环系统中两个值之间差异的最佳方法?
- python - scrapy splash应用程序中的长链异常
- javascript - 使用 javascript 在 json 中组合对象
- c# - C#打开PPTX文件到特定幻灯片索引
- django - 如何在具有字段作为外键的 django 模型中查询?
- angular - Angular/Typescript - 布尔变量未在 .subscribe 上更新
- html-select - 如何从 Chrome DevTools 中的 Select 中获取选项?
- amazon-web-services - AWS Sagemaker 是否会按 API 请求向您收费?