[英]How do I check if dataframe column contains a string from another dataframe column and return adjacent cell in python pandas?
[英]Check if a string contains another string from different Dataframe - Python
我有兩個具有不同列和大小的數據框。
第一個有一些列,其中一個是字符串字段(列1)。 第二個數據幀有2列,一列是字符串字段(第4列),其中兩個單詞之間用逗號分隔,另一列是整數字段(第5列)。
我需要驗證數據框1中的第1列在第4列數據框2中有單詞,並在數據框1中用數據框2中的相應信息填充。
例:
df1
column 1 column 2 column 3
0 bla bla sample1 bla bla sample2 a f
1 bla bla sample1 bla bla sample5 b g
2 bla bla sample3 bla bla sample4 c h
3 bla bla sample8 bla bla sample7 d i
4 bla bla sample1 bla bla sample2 e j
df2
column 4 column 5
0 ('sample1', 'sample2'), 50
1 ('sample3', 'sample4'), 35
2 ('sample1', 'sample5') 18
我需要輸出:
Output:
df1
column 1 column 2 column 3 column 4 column 5
0 bla bla sample1 bla bla sample2 a f ('sample1', 'sample2') 50
1 bla bla sample1 bla bla sample5 b g ('sample1', 'sample5') 18
2 bla bla sample3 bla bla sample4 c h ('sample3', 'sample4') 35
3 bla bla sample8 bla bla sample7 d i NaN
4 bla bla sample1 bla bla sample2 e j ('sample1', 'sample2') 50
有任何想法嗎?
謝謝!
我不保證這會特別快,但是可以完成工作。 我們將使用set
邏輯檢查匹配項。 我們必須跳過一些箍,以便我們可以存儲比賽的元組列表。 我認為這不是一個特別好的主意。
import numpy as np
import pandas as pd
df1['setc'] = df1['column 1'].str.split().apply(set)
# Initialize so addition works
df1['column 4'] = [[] for i in range(len(df1))]
df1['column 5'] = 0
for idx, row in df2.iterrows():
m = (df1.setc.values & set(row['column 4'])) == set(row['column 4'])
df1.loc[m, 'column 4'] += pd.Series([[row['column 4']] for x in range(len(m))])[m]
df1.loc[m, 'column 5'] += row['column 5']
df1 = df1.drop(columns='setc')
# NaN where nothing matched
df1.loc[df1['column 4'].str.len().eq(0), ['column 4', 'column 5']] = np.NaN
column 1 column 2 column 3 column 4 column 5
0 bla bla sample1 sample5 sample2 a f [(sample1, sample2), (sample1, sample5)] 68.0
1 bla bla sample1 bla bla sample5 b g [(sample1, sample5)] 18.0
2 bla bla sample3 bla bla sample4 c h [(sample3, sample4)] 35.0
3 bla bla sample8 bla bla sample7 d i NaN NaN
4 bla bla sample1 bla bla sample2 e j [(sample1, sample2)] 50.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.