python - 将嵌套列表与数据框匹配
问题描述
我有一个嵌套列表,如下所示,
[['a'], ['b'], [], ['d', 'a'], ['c', 'd', 'a']]
我还有一个数据框,它用一个值映射字母,即
col1 value
0 a 2
1 b 5
2 c 4
3 d 9
我的目标是将列表中的字母与数据框匹配并返回相应的值。如果有超过 1 个字母,我需要它们的值的总和。我的预期结果是一个平面列表,如下所示,
[2, 5, 0, 11, 15]
我尝试做一个 for 循环,但无法让它工作。
for i in l1:
if len(i) == 0:
print(0)
elif len(i) > 1:
for j in i:
print(d1[d1['col1'] == j]['value'])
else:
print(d1[d1['col1'] == i]['value'])
此外,效率是关键,因为数据集很大
数据
l1 = [['a'], ['b'], [], ['d', 'a'], ['c', 'd', 'a']]
d1 = pd.DataFrame({'col1':['a', 'b', 'c', 'd'], 'value':[2, 5, 4, 9]})
会话详细信息
print(sys.version)
3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)]
解决方案
IIUC for 循环isin
[d1.loc[d1.col1.isin(x),'value'].sum()for x in l1]
Out[883]: [2, 5, 0, 11, 15]
推荐阅读
- javascript - path.scope.bindings 是否仅包含源代码中的变量,而不包含在 babel 转换时动态插入的变量?
- mysql - MySQL 行 ID 似乎是数字数组或加密
- hive - 信息模式蜂巢
- ios - 将视图放在右下角,隐藏部分,以编程方式 swift 5
- javascript - 如果输入为空,则禁用按钮
- user-interface - 如何在 VSCode 插件中制作带有字段的屏幕
- android - 连接几个点作为谷歌地图上的路线
- pointers - 进行迭代中序树遍历时出现分段错误
- c - 使应用程序通过 UDP 发现彼此
- css - 我可以结合位置:粘性和浮动:左吗?