[英]pandas join list elements to other dataframe column
我有以下熊猫数据框,我想加入列表列,查找并获取值。
df1
x_id y_id
1 [101,102,103]
2 [102, 103]
3 [103]
df2
y_id y_name
101 abc
102 xyz
103 def
我想要一个数据框 df3 为:
df3
x_id y_id y_names
1 [101,102,103] [abc, xyz, def]
2 [102, 103] [xyz, def]
3 [103] [def]
尝试使用查找和应用功能,但无法实现。
使用列表推导和映射系列的第一个选项:
s = df2.set_index('y_id')['y_name']
df1['y_names'] = [[s[x] for x in l] for l in df1['y_id']]
使用explode
、 map
和groupby.agg
的第二个选项:
(df1
.explode('y_id')
.assign(y_names=lambda d: d['y_id'].map(df2.set_index('y_id')['y_name']))
.groupby('x_id', as_index=False).agg(list)
)
输出:
x_id y_id y_names
0 1 [101, 102, 103] [abc, xyz, def]
1 2 [102, 103] [xyz, def]
2 3 [103] [def]
使用的输入:
df = pd.DataFrame({'x_id': [1, 2, 3],
'y_id': [[101, 102, 103], [102, 103], [103]]})
将 df2 转换为字典进行查找,然后使用数据框 apply 从字典中获取查找值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.