2015-12-28 132 views
3

我有兩個Dataframes類似如下:合併/ Concat的問題

數據幀1

ID VALUE  DATE 
1 google.com 12/28/2015 
2 yahoo.com 12/28/2015 
3 cnn.com  12/28/2015 
4 facebook.com 12/28/2105 

數據幀2

ID COMMENT 
1 Bad Stuff 
2 Good Stuff 
3 Werid Stuff 
4 Crazy Stuff 

和期望的結果將在這裏

ID VALUE  DATE   COMMENT 
1 google.com 12/28/2015 Bad Stuff 
2 yahoo.com 12/28/2015 Good Stuff 
3 cnn.com  12/28/2015 Weird Stuff 
4 facebooo.com 12/28/2015 Crazy Stuff 

看起來和se埃姆斯對我來說很簡單,但我無法弄清楚。我已經上下讀了熊貓文檔並搜索了SOF一段時間。

這就是我現在所擁有的。

#Now, let's try to merge this data using Pandas 
indicatorPanda = pd.read_csv('/tmp/i.csv') 
commentPanda = pd.read_csv(open('/tmp/e.csv', 'rU'), encoding='utf-8') 
mergedPanda = pd.concat([indicatorPanda, commentPanda], axis=1) 
mergedPanda.to_csv('/tmp/output.csv', index=False, header=False) 

我來接近,但它看起來像concating上軸1仍然保持是第二個「ID」列在最後。

編輯: 所以我現在很接近,我用這:

mergedPanda = indicatorPanda.merge(commentPanda, on='id', how='left') 

但是我有,因爲在Dataframe2

多行具有相同ID重複行的問題所以,現在,這裏就是我想要的我的最終結果是:

數據幀1

ID VALUE  DATE 
1 google.com 12/28/2015 
2 yahoo.com 12/28/2015 
3 cnn.com  12/28/2015 
4 facebook.com 12/28/2105 

數據幀2

ID COMMENT 
1 Bad Stuff 
1 Much Worse Stuff 
2 Good Stuff 
3 Werid Stuff 
4 Crazy Stuff 

和期望的結果將在這裏

ID VALUE  DATE   COMMENT 
1 google.com 12/28/2015 Bad Stuff | Much Worse Stuff 
2 yahoo.com 12/28/2015 Good Stuff 
3 cnn.com  12/28/2015 Weird Stuff 
4 facebook.com 12/28/2015 Crazy Stuff 

有沒有辦法只有CONCAT評論到對方有某種性格?我知道我們已經脫離了常規SQL和熊貓的境界。

回答

2

它看起來像你的DataFrames沒有ID設定爲指標,所以.merge()會爲(see docs)工作:

df3 = dataframe1.merge(dataframe2, on='ID', how='left) 

pd.concat()合併上index,所以它應該工作正常(axis=1意味着水平,而不是垂直組合),如果在合併(see docs)之前爲DataFrame執行df.set_index('ID', inplace=True)

+1

謝謝,這是「工作」 - 但我有重複問題。無論DataFrame 2出現多少次,我都希望項目被添加到DataFrame 1中行的末尾。這可能嗎? – gleb1783

+0

這聽起來像你想做一個'左'合併?查看更新的答案。您可以指定在'sql'邏輯之後執行'inner'(默認),'right','left'或'outer' join。 – Stefan

+0

這似乎並不奏效:mergedPanda = pd。合併(indicatorPanda,commentPanda,on ='id',how ='left') – gleb1783

2

我認爲合併會適合您的情況。

dataframe3 = pd.merge(dataframe1, dataframe2, left_index=True, right_index=True)