python - 如何对列表元素的值求和,哪些元素的值来自熊猫中的 anthor 数据框?
问题描述
我有两个 pandas DataFrame,分别称为df1
and 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
如何?非常感谢。
解决方案
首先创建字典df1
,然后使用get
for map value of列出理解dict
,如果不匹配的值被添加0
到sum
:
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
如果想要删除NaN
s 是可能的使用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
推荐阅读
- javascript - 当使用来自 JS 的 Ajax 调用和在 JSP 中发送带有表单的 POST 时,返回“视图”的 Spring 代码的工作方式不同
- java - Java 多线程从内部类引用的局部变量必须是 final 或有效 final
- python - 将标准化从 Pandas 转换为 AWK 以提高性能
- java - 迁移 Playframework 2.4.3 到 2.7.0 中的问题
- windows - 如何从用户上下文执行 Add-LocalGroupMember 脚本包
- django - 即使启用了 xss,也会执行脚本
- python - 向网站发送发布请求时如何返回结果,然后选择其中一个?
- sql - 有没有办法在列表和标签上查询自定义表?
- node.js - 从具有适当表格格式的 json 数组对象生成 pdf
- php - 在 Windows 10 的 PHP 上调用未定义的函数 mysqli_connect