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

我想对 bc 列进行分组,并使用剩余的列名称及其值创建字典。

预期输出:

[
    {
        "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}]}]
​

https://stackoverflow.com/questions/66794309/

相关文章:

qt - 如何将 QML 文件组织到嵌套文件夹中?

firebase - 在 Flutter 中使用相同的 Firebase 将同一应用程序中的用户和卖

delphi - GDI+ DrawLine 什么都不画

ios - 如何将十六进制数据分解为来自 BLE 设备的可用数据? (速度和节奏)

go - 为什么在地址上取消引用会在 golang 中产生 "invalid indirect"错误

c - 这个 C 函数是什么意思?函数指针?

heroku - Unresolved 导入 `core::task::Wake`

r - 如何在 Apple Silicon (M1) Mac 上安装 RcppArmadillo

javascript - 如何使用react router dom显示详细信息页面

python-3.x - 根据索引和标签转换数据框