【发布时间】:2021-07-10 16:27:40
【问题描述】:
我有一个数据框列,其中包含列表中的值,如果它们在其他数据框中,想要添加具有列表中过滤值的新列。
df:
df = pd.DataFrame({'a':[1,2,5,7,9],'b':[[10,1,'xxx'],[],[1,2,3],[5],[25,27]]})
**a**|**b**
:-----:|:-----:
1|[10, 1, 'xxx']
2|[]
5|[1, 2, 3]
7|[5]
9|[25, 27]
df2:
df2 = pd.DataFrame({'d':[324,21,4353,345,4535,23],'e':[5,1,23,25,25,'xxx']})
我需要在df 中添加带有过滤列b 的新列,以便它包含仅包含df2 列e 中的元素的列表。
结果:
**a**|**b**|**c**
:-----:|:-----:|:-----:
1|[10, 1, 'xxx']|[1,'xxx']
2|[]|[]
5|[1, 2, 3]|[1]
7|[5]|[5]
速度至关重要,因为有大量记录。
我现在做了什么:
- 创建了一组可能的值
l = list(df2['e'].unique())
- 尝试将
df.assign与综合列表一起使用,但效果不佳且速度太慢。
df.assign(mapped=[[x for x in row if x in l] for row in df.b])
感谢任何帮助。
更新
在列表和 df2 中并不总是整数值,有时是字符串。
【问题讨论】:
标签: python pandas list dataframe mapping