Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带dict.update()的groupby函数_Python_Pandas - Fatal编程技术网

Python 带dict.update()的groupby函数

Python 带dict.update()的groupby函数,python,pandas,Python,Pandas,我正在尝试将Pandas groupby函数与dict.update()函数一起用于每个元素。数据框中的示例(仅用于说明): ab 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。我

我正在尝试将Pandas groupby函数与dict.update()函数一起用于每个元素。数据框中的示例(仅用于说明):

ab
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函数,但没有得到任何有用的结果

结果应该是:

ab
0 icon1{'ap1':{'item':1},'ap2':{'item':2},'ap3':{'item':3}
在不更改dict的项目类型的情况下也可以这样做吗?

toolz.dicttoolz.merge

安装程序
使用听写理解

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


您可以使用助手函数:

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

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

此函数可以工作,但它返回一个对象。是否有可能将此对象转换为pd.系列或数据帧?您需要更详细地描述您所期望的内容。尽管如此,我还是会用我认为你想要的东西来更新。@GabrielHisatugu好吧,首先,
pd.Series
pd.DataFrame
都是对象,因为在Python中一切都是对象。在任何情况下,这会产生一个数据帧,那么你到底是什么意思?嘿@胡安帕。阿里维拉加。哦,我猜不出你想要什么。你可以看到我到目前为止做了什么。如果这是有意义的,或者有助于你巩固你想要做的事情,那么用更多的描述编辑你的问题并让我知道。对不起,我认为预期的结果是一个很好的例子。我希望结果显示在一个新的数据框中,因为groupby函数正常工作,“a”列带有“icon1”,更新后的dict位于“B”列。谢谢@rafaelc,在对我的数据进行一些处理后,这解决了这个问题。要学的新东西:听写理解!
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()