python - groupby 一列并将剩余列转换为字典

标签 python pandas dataframe pandas-groupby

我有一个像这样的数据框

import pandas as pd

df = pd.DataFrame({'keyid': ['d1', 'd1', 'd2', 'd2'],
                   'keys': ['key1', 'key2', 'key1', 'key2'],
                   'vals': ['val1', 'val2', 'val3', 'val4']})

  keyid  keys  vals
0    d1  key1  val1
1    d1  key2  val2
2    d2  key1  val3
3    d2  key2  val4

我想转换成

{'d1': {'key1': 'val1', 'key2': 'val2'},
 'd2': {'key1': 'val3', 'key2': 'val4'}}

我得到的最接近的是:

print(df.groupby('keyid')['keys', 'vals'].apply(lambda g: g.to_dict(orient='records')).to_dict())

打印内容

'd1': [{'keys': 'key1', 'vals': 'val1'}, {'keys': 'key2', 'vals': 'val2'}],
'd2': [{'keys': 'key1', 'vals': 'val3'}, {'keys': 'key2', 'vals': 'val4'}]}

我现在可以进一步修改这本字典,但是有更直接的方法吗?

最佳答案

你已经很接近了,只需要在 apply 中使用 dictvalues 进行字典:

print(df.groupby('keyid')['keys', 'vals'].apply(lambda x: dict(x.values)).to_dict())
{'d1': {'key1': 'val1', 'key2': 'val2'}, 
 'd2': {'key1': 'val3', 'key2': 'val4'}}

关于python - groupby 一列并将剩余列转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53870317/

相关文章:

python - 如何完全禁用 vscode 上特定文件的 linting?

python - 从图像中获取颜色并表示它

python - Python : Syntax Error that is not a Syntax Error? [closed]

python - 如何获取 pandas 数据框中不唯一且按行排列的项目数?

python - 如何修复名称错误: name 'author' is not defined when running python script

python Pandas : rename single column label in multi-index dataframe

python - 不理解 pandas 中 MonthEnd() 的输出

r - 如何用另一行中的单词替换一行中的部分字符串?

python - 获取与Dataframe中每一行中的最大值相对应的所有列的列表

python - 数据帧单元格被锁定并用于运行余额计算,条件是同一行上另一个单元格的结果