2017-07-17 24 views
2

我是Python的新手,試圖解決性能問題。 我有2個數據幀尋找字符串列表中的字符串並在熊貓中創建新列

數據幀1

col1  col2 
holiday  party 
party  party 
bagel  snack 
fruit  snack 

數據幀2:

col1       col2 
bagel wednesday     snack    
coffee for party    snack 
holiday party     party 

數據幀1具有2列。我需要在DataFrame2.col1中查找DataFrame1.col1,並在DataFrame2.col2中創建一個DataFrame1.col2值爲 的新列。目前,我正在使用循環實現此操作,並且需要很長時間。我正在尋找一種有效的方式來做到這一點。另外,如果我得到多個匹配,我應該總是從DataFrame1中找到第一個匹配。例如,「咖啡派對」有DF1,小吃和派對的2場比賽,在這種情況下,應該從DF1.col2中挑選「零食」。

感謝 RL

+0

這裏是dataframes:DF1 = pd.DataFrame({ 'COL1': '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天' ], 'col2':['weekday','weekday','weekday','weekday','weekday','weekend','weekend',]}) df2 = pd.DataFrame({'col1 ':['離開星期五','週六觀看週二','休息日','週一正在工作'], 'col2':['weekday','weekend','','weekday']}) – user8310044

回答

0

我認爲你必須遍歷一週的天(但不是DF2的所有行(當然,df.col.str.contains會做內環爲您在優化的方式))。

for item in df1.col2.unique(): 
    for idx, row in df1[df1.col2==item].iterrows(): 
     df2.loc[df2.col1.str.contains(row.col1), 'col3'] = item 
+0

感謝您的回答。它運作良好,但我沒有提到另一件事。這次我採取了另一個例子。在第1欄的話,可能會發生在df2.col1 string.contains任何爲了這不起作用: 數據幀1個 COL1 \t \t COL2 冰淇淋小吃 冷飲飲料 數據幀2: COL1 \t \t \t COL2 冰和奶油\t \t小吃 冷飲\t飲料 休息一天\t \t 冰淇淋\t \t零食 – user8310044

+0

我不明白你的意思。用一個例子更新原始問題。 – Kyle

+0

我現在改變了這個例子。你可以看看並告訴我如何繼續? – user8310044

相關問題