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