合并/ Concat问题

时间:2015-12-28 15:50:39

标签: python csv pandas

我有两个Dataframes,如下所示:

DataFrame 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

DataFrame 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

看起来对我来说似乎很简单,但我无法弄明白。我上下阅读了Pandas文档,并搜索了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)

我已经接近但看起来在Axis 1上的结论仍然保留了第二个ID'最后一栏。

编辑: 所以我现在关闭了,我正在使用它:

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

但由于Dataframe2中有多行,我遇到了具有相同ID的重复行的问题。

所以,现在,我想要的最终结果是:

DataFrame 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

DataFrame 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

有没有办法将评论以某种角色连接在一起?我知道我们不在常规SQL和Panda的范围内。

2 个答案:

答案 0 :(得分:2)

我认为Merge适用于您的情况。

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

答案 1 :(得分:2)

您的DataFrames似乎没有ID设置为索引,因此.merge()将作为(see docs)

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

pd.concat() index合并axis=1,因此它应该正常工作(df.set_index('ID', inplace=True)表示水平,而不是垂直组合)如果DataFrame MENU ( ID, NAME, URL, FATHER ) public class Menu { private int id; private String name; private String url; private List<Menu> childMenu; } 在合并(see docs)之前。