[英]Update cell in dataframe1 based on value from list in dataframe2
我有一个 dataframe1,其中有一列具有像这样的单元格条目(每个单元格是一组逗号分隔的单词) - "are, boy, cat, dog, ear, far, gone"
。
Dataframe2 有一列包含像这样的单元格条目(每个单元格是一个字母或单词) - "are"
或"boy"
或"gone"
。
我想向 dataframe1 添加一列,如果 dataframe1 中每个单元格中的单词在 dataframe2 中都有一个单词,则该列将具有布尔条目。 例如,
DF1 =(是,男孩,猫,狗,耳朵,远,走了),(家,家伙,高,蛋),(猫,完成,屋顶,草),等等.....
DF2 = (are), (boy), (gone), 等等....
dataframe1 中的新列单元格值 = (1)、(0)、(1) 等......
假设这些是您的输入,
import pandas as pd
df1 = pd.DataFrame(
{'A': [
'are, boy, cat, dog, ear, far, gone',
'home, guy, tall, egg',
'cat, done, roof, grass',
]}
)
df2 = pd.DataFrame({'A': ['are', 'boy', 'gone']})
print('%s\n%s' % (df1, df2))
# A
# 0 are, boy, cat, dog, ear, far, gone
# 1 home, guy, tall, egg
# 2 cat, done, roof, grass, boy
# A
# 0 are
# 1 boy
# 2 gone
我们可以使用Series.str.split()
将逗号分隔的字符串转换为列表:
df1['A'].str.split(r'\s*,\s*')
# 0 [are, boy, cat, dog, ear, far, gone]
# 1 [home, guy, tall, egg]
# 2 [cat, done, roof, grass, boy]
# Name: A, dtype: object
split r'\\s*,\\s*'
是一个正则表达式模式,匹配逗号和中间的任何空格。 r
前缀意味着将字符串文字视为原始字符串。
然后我们应用set.isdisjoint()
来检查哪些单元格不包含df2
的值:
df1['A'].str.split(r'\s*,\s*').apply(set(df2['A']).isdisjoint)
# 0 False
# 1 True
# 2 True
# Name: A, dtype: bool
然后最后否定这一点并分配给新列'B'
:
df1['B'] = ~df1['A'].str.split(r'\s*,\s*').apply(set(df2['A']).isdisjoint)
print(df1)
# A B
# 0 are, boy, cat, dog, ear, far, gone True
# 1 home, guy, tall, egg False
# 2 cat, done, roof, grass False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.