首页 > 解决方案 > 如何对列表元素的值求和,哪些元素的值来自熊猫中的 anthor 数据框?

问题描述

我有两个 pandas DataFrame,分别称为df1and df2。我想对列表df2值来自的列表值求和df1

例如:

df1:

df1 = pd.DataFrame([['a',11],['b',13],['c',45],['d',88]],columns=['name1','data1'])
df1

    name1   data1
0      a       11
1      b       13
2      c       45
3      d       88

和df2:

df2 = pd.DataFrame([['a',['b','c','d']],['b',['a','c']]],columns=['name2','data2'])
df2

    name2         data2
0      a      [b, c, d]
1      b         [a, c]

最后,我想要这个:

    name2   data2
0      a      146
1      b       56

如何?非常感谢。

标签: pythonpandas

解决方案


首先创建字典df1,然后使用getfor map value of列出理解dict,如果不匹配的值被添加0sum

d = df1.set_index('name1')['data1'].to_dict()
df2['data2'] = [sum(d.get(y, 0) for y in x) for x in df2['data2']]
print (df2)

  name2  data2
0     a    146
1     b     56

如果想要删除NaNs 是可能的使用filter 条件

df1 = pd.DataFrame([['a',11],['b',13],['c',45],['d',np.nan]],columns=['name1','data1'])
print (df1)
  name1  data1
0     a   11.0
1     b   13.0
2     c   45.0
3     d    NaN

df2 = pd.DataFrame([['a',['b','c','d']],['b',['a','c']]],columns=['name2','data2'])

d = df1.set_index('name1')['data1'].to_dict()
df2['data2'] = [sum(filter(lambda v: v==v, (d.get(y, 0) for y in x))) for x in df2['data2']]
print (df2)

  name2  data2
0     a   58.0
1     b   56.0

推荐阅读