python-3.x - 从另一个数据框中搜索(行值)数据
问题描述
我有两个数据框,分别是 df1 和 df2。
在一个数据框中,我有一个搜索值列表(实际上是 Col1)
Col1 Col2
A1 val1, val2
B2 val4, val1
C3 val2, val5
我有另一个数据框,其中有一个项目列表
value items
val1 apples, oranges
val2 honey, mustard
val3 banana, milk
val4 biscuit
val5 chocolate
我想遍历第一个 DF 并尝试使用该 val 作为键来搜索来自第二个 DF 的项目
预期输出:
A1 apples, oranges, honey, mustard
B2 biscuit, appleas, oranges
C3 honey, mustard, chocolate
我能够将值添加到数据框中并遍历第一个 DF
for index, row in DF1:
#list to hold all the values
finalList = []
list = df1['col2'].split(',')
for i in list:
print(i)
我只需要帮助从第二个数据帧中获取值。将不胜感激任何帮助。谢谢。
解决方案
想法是使用 lambda 函数split
并通过字典查找:
d = df2.set_index('value')['items'].to_dict()
df1['Col2'] = df1['Col2'].apply(lambda x: ', '.join(d[y] for y in x.split(', ') if y in d))
print (df1)
Col1 Col2
0 A1 apples, oranges, honey, mustard
1 B2 biscuit, apples, oranges
2 C3 honey, mustard, chocolate
items
如果值解决方案中有列表,则通过展平进行更改:
d = df2.set_index('value')['items'].to_dict()
f = lambda x: ', '.join(z for y in x.split(', ') if y in d for z in d[y])
df1['Col2'] = df1['Col2'].apply(f)
print (df1)
Col1 Col2
0 A1 apples, oranges
1 B2 biscuit, apples, oranges
2 C3 honey, mustard, chocolate
推荐阅读
- r - 在 For 循环 R 中将新列绑定到 DF
- php - php cURL 循环下载一次,然后停止
- c++ - 高级静态多态性
- google-apps-script - 在 Google 表单上执行计算
- sql - 对多列使用连接的累积总和
- python - TensorFlow 优化张量列表
- java - ArrayList 只获取一行,而 ResultSet 读取多于一
- sql-server - TFS 仪表板小部件:查询 TFS_Warehouse 数据库?
- python - 自动完成 ipython 结束方/圆括号
- django - Django-compressor & S3 Boto:静态文件未压缩