2015-12-28 54 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)