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