pandas:通过基于列创建字典键值对来聚合行

2ekbmq32  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(169)

假设我有一个Pandas数据框:

| id1 | id2 | attr1 | combo_id | perm_id |
| --- | --- | --- | --- | --- |
| 1 | 2 | [9606] | [1,2] | AB |
| 2 | 1 | [9606] | [1,2] | BA |
| 3 | 4 | [9606] | [3,4] | AB |
| 4 | 3 | [9606] | [3,4] | BA |

我想将具有相同combo_id的行聚合在一起,并使用该行的perm_id存储两行的信息。

| attr1 | combo_id |
| --- | --- |
| {'AB':[9606], 'BA': [9606]} | [1,2] |
| {'AB':[9606], 'BA': [9606]} | [3,4] |

如何使用groupby和聚合函数来执行这些操作?
我尝试使用perm_id将attribute1转换为dict。
df['attr1'] = df.apply(lambda x: {x['perm_id']: x['attr1']})
然后我计划使用一些东西来合并同一组中的词典。df.groupby(['combo_id']).agg({ 'attr1': lambda x: {x**})但这导致了KeyError:永久标识
有什么建议吗?

hrysbysz

hrysbysz1#

试试看:

from ast import literal_eval

x = (
    df.groupby(df["combo_id"].astype(str))
    .apply(lambda x: dict(zip(x["perm_id"], x["attr1"])))
    .reset_index(name="attr1")
)

# convert combo_id back to list (if needed)
x["combo_id"] = x["combo_id"].apply(literal_eval)

print(x)

印刷品:

combo_id                         attr1
0   [1, 2]  {'AB': [9606], 'BA': [9606]}
1   [3, 4]  {'AB': [9606], 'BA': [9606]}

相关问题