带的groupby函数词典更新()

2024-10-02 20:33:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Pandas groupby函数与词典更新()每个元素的函数。数据框中的示例(仅用于说明):

        A                                            B
0   icon1   {'ap1': {'item' : 1}, 'ap2': {'item' : 2}}

1   icon1                        {'ap3': {'item' : 3}}

我要做的是设置

df = df.groupby('A')['B'].apply(', '.join).reset_index()

但是我需要按“A”列分组并更新“B”列中的每个元素,而不是使用python', '.join。我试过使用map函数,但是没有得到任何有用的结果。你知道吗

结果应该是:

        A                                                                 B
0   icon1   {'ap1': {'item' : 1}, 'ap2': {'item' : 2}, 'ap3': {'item' : 3}}

如果不改变dict中的项目类型,这是可能的吗?你知道吗


Tags: 数据函数元素示例pandasdfitem词典
3条回答

使用听写理解

df.groupby('A').B.agg(lambda s: {k:v for a in s for k, v in a.items()}).reset_index()

        A                                                                 B
0   icon1   {'ap1': {'item' : 1}, 'ap2': {'item' : 2}, 'ap3': {'item' : 3}}

可以使用助手函数:

def func(x):
    dct = {}
    for i in x:
        dct.update(i)
    return dct

df.groupby('A')['B'].agg(func).reset_index()

toolz.dicttoolz.merge

from toolz.dicttoolz import merge

df.groupby('A')['B'].agg(merge).reset_index()

       A                                                  B
0  icon1  {'ap1': {'item': 1}, 'ap2': {'item': 2}, 'ap3'...
1  icon2  {'ap1': {'item': 1}, 'ap2': {'item': 2}, 'ap3'...

设置

df = pd.DataFrame(dict(
    A=['icon1', 'icon1', 'icon2', 'icon2'],
    B=[{'ap1': {'item': 1}, 'ap2': {'item': 2}}, {'ap3': {'item': 3}}] * 2
))

相关问题 更多 >