Python 在合并中聚合映射值

Python 在合并中聚合映射值,python,pandas,join,aggregate,pandas-groupby,Python,Pandas,Join,Aggregate,Pandas Groupby,我有一个数据框: import pandas as pd df = pd.DataFrame({"a": [["x","y"]], "b": [2]}) df2= pd.DataFrame({"a": ["x","y"], "b":[2,2], "c": [3,4]}) 其中df.a具有列表项: a b 0 ["x","y"] 2 和df2将这些列表元素(以及其他列的条目)映射到c列: a b c 0 "x" 2

我有一个数据框:

import pandas as pd
df = pd.DataFrame({"a": [["x","y"]], "b": [2]})
df2= pd.DataFrame({"a": ["x","y"], "b":[2,2], "c": [3,4]})
其中
df.a
具有列表项:

    a           b   
0   ["x","y"]   2
df2
将这些列表元素(以及其他列的条目)映射到c列:

    a       b   c
0   "x"     2   3
1   "y"     2   4
我想左键连接
df,df2
,这样我就可以得到:

    a           b   c
0   ["x","y"]   2   7

当聚合(在本例中为sum)跨越从键a、b映射的值c时。

我的想法是首先在df1中创建一个唯一键,这样它就保留了列a中列表的分组,允许您使用df.explode in pandas>0.25。我还添加了一行来测试它的工作方式:

df1['key'] = (df1.a != df1.a.shift()).cumsum()
df1 = df1.explode('a')
df = df1.merge(df2)
df = df.groupby('key').agg({'a': list, 'b': 'first', 'c': sum}).reset_index(drop=True)

print(df)
        a  b   c
0  [x, y]  2   7
1     [z]  3  10

只需这样做:
df['c']=sum(df2['c'])
no必须在连接后进行聚合谢谢!因为列a不是唯一的,所以使用
df1['key']=df1.index