繁体   English   中英

根据 dataframe2 中列表的值更新 dataframe1 中的单元格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM