我有两个不同长度的数据帧,如下所示:
数据框A:
FirstName LastName
Adam Smith
John Johnson
数据框B:
First Last Value
Adam Smith 1.2
Adam Smith 1.5
Adam Smith 3.0
John Johnson 2.5
想象一下,我想要做的是在“DataFrame A”中创建一个新列,对具有匹配姓氏的所有值求和,因此“A”中的输出将是:
FirstName LastName Sums
Adam Smith 5.7
John Johnson 2.5
如果我在 Excel 中,我会使用
=SUMIF(dfB!B:B, B2, dfB!C:C)
在Python中,我一直在尝试多种解决方案,但同时使用np.where、df.sum()、删除索引等,但我迷失了。下面的代码返回“ValueError:只能比较相同标签的系列对象”,但我认为它无论如何都写得不正确。
df_a['Sums'] = df_a[df_a['LastName'] == df_b['Last']].sum()['Value']
非常感谢您的帮助。
Use boolean indexing with Series.isin进行过滤然后聚合sum
:
df = (df_b[df_b['Last'].isin(df_a['LastName'])]
.groupby(['First','Last'], as_index=False)['Value']
.sum())
如果想要同时匹配名字和姓氏:
df = (df_b.merge(df_a, left_on=['First','Last'], right_on=['FirstName','LastName'])
.groupby(['First','Last'], as_index=False)['Value']
.sum())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)