Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并/合并问题_Python_Csv_Pandas - Fatal编程技术网

Python 合并/合并问题

Python 合并/合并问题,python,csv,pandas,Python,Csv,Pandas,我有两个数据帧,如下所示: 数据帧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 ID VALUE DATE 1 google.com 12/28/2015 2 yahoo.com 12/28/2015 3 cnn.com 1

我有两个数据帧,如下所示:

数据帧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
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  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
2    yahoo.com    12/28/2015    Good Stuff
3    cnn.com      12/28/2015    Weird Stuff
4    facebooo.com 12/28/2015    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
看起来,对我来说似乎很简单,但我不太明白。我已经上下阅读了熊猫的文档,搜索了一段时间

这是我现在拥有的

#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)
我已经很接近了,但看起来轴1上的concating仍然保留第二个“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
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  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
2    yahoo.com    12/28/2015    Good Stuff
3    cnn.com      12/28/2015    Weird Stuff
4    facebooo.com 12/28/2015    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的范畴。

我认为合并对您的案例很有效

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

看起来您的
DataFrames
没有将
ID
设置为索引,因此
.merge()
将作为:


您的
pd.concat()
索引上进行合并,因此如果您在合并之前为这两个
数据帧设置索引('ID',inplace=True)
,它应该可以正常工作(
轴=1
表示水平,而不是垂直组合)

谢谢,这确实“管用”——但我对复制品有意见。我希望将项目添加到DataFrame 1中的行末尾,无论它们在DataFrame 2中出现多少次。这可能吗?听起来你想进行“左”合并?请参阅更新的答案。您可以指定按照
sql
逻辑进行
内部连接(默认),
右侧连接
左侧连接
,或
外部连接。这似乎不起作用:mergedPanda=pd。merge(indicatorPanda,commentPanda,on='id',how='left')更新了我的问题。我认为您应该问一个新问题。