gpt4 book ai didi

python - 将 groupby 选定的列作为字典移动到新的 pandas 列中

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:30 24 4
gpt4 key购买 nike

我在 python 中有以下 pandas DataFrame:

df = pd.DataFrame({'id': [1, 1, 2, 2, 3],
'field1': [1, 2, 3, 4, 5],
'field2': ['a', 'b', 'c', 'd', 'e']})
    id  field1  field2
0 1 1 a
1 1 2 b
2 2 3 c
3 2 4 d
4 3 5 e

我想按 id 对上表进行分组,然后将该组中所有选定的列值移动到一个新列中作为 python 字典列表。

所以从上面我想制作这个:

    id  fields
0 1 [{'field1': 1, 'field2': 'a'}, {'field1': 2, 'field2': 'b'}]
2 2 [{'field1': 3, 'field2': 'c'}, {'field1': 4, 'field2': 'd'}]
4 3 [{'field1': 5, 'field2': 'e'}]

我可以使用以下 python 代码实现此目的:

def test(df):
df['fields'] = [df[['field1', 'field2']].to_dict(orient='records')]*len(df)
return df

df.groupby('id').apply(test).drop_duplicates('id')[['id', 'fields']]

但我相信它可以做得更好。问题是如何?我对这部分特别不满意:

df['fields'] = [df[['field1', 'field2']].to_dict(orient='records')]*len(df)

我必须制作一个包含组长度的列表,以便为行分配相同的字典值。此外,这使它更需要内存。

最佳答案

也许

df.set_index('id').groupby(level=0).apply(pd.DataFrame.to_dict, orient='r')

id
1 [{'field1': 1, 'field2': 'a'}, {'field1': 2, 'field2': 'b'}]
2 [{'field1': 3, 'field2': 'c'}, {'field1': 4, 'field2': 'd'}]
3 [{'field1': 5, 'field2': 'e'}]
dtype: object

总是可以在末尾添加 .to_frame('fields') 以获得 df

关于python - 将 groupby 选定的列作为字典移动到新的 pandas 列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58306885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com