簡體   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