附加两个具有相同列,不同顺序的数据帧

时间:2014-01-29 15:16:00

标签: python join pandas append

我有两个pandas数据帧。

noclickDF = DataFrame([[0,123,321],[0,1543,432]], columns=['click', 'id','location'])
clickDF = DataFrame([[1,123,421],[1,1543,436]], columns=['click', 'location','id'])

我只是想加入,以便最终的DF看起来像:

click  |  id   |   location
0         123        321
0         1543       432
1         421        123
1         436       1543

正如您所看到的,两个原始DF的列名相同,但顺序不同。此外,列中没有连接。

3 个答案:

答案 0 :(得分:29)

您也可以使用pd.concat

In [36]: pd.concat([noclickDF, clickDF], ignore_index=True)
Out[36]: 
   click    id  location
0      0   123       321
1      0  1543       432
2      1   421       123
3      1   436      1543

在幕后,DataFrame.append拨打pd.concatDataFrame.append具有处理各种输入类型的代码,例如Series,tuples,lists和dicts。如果您将其传递给DataFrame,它会直接传递到pd.concat,因此使用pd.concat会更直接。

答案 1 :(得分:5)

For future users (sometime >pandas 0.23.0):

You may also need to add sort=True to sort the non-concatenation axis when it is not already aligned (i.e. to retain the OP's desired concatenation behavior). I used the code contributed above and got a warning, see Python Pandas User Warning的最佳方法。下面的代码有效,并且不会引发警告。

In [36]: pd.concat([noclickDF, clickDF], ignore_index=True, sort=True)
Out[36]: 
   click    id  location
0      0   123       321
1      0  1543       432
2      1   421       123
3      1   436      1543

答案 2 :(得分:3)

你可以使用追加

 df = noclickDF.append(clickDF)
 print df 

    click    id  location
 0      0   123       321  
 1      0  1543       432
 0      1   421       123
 1      1   436      1543

如果需要,可以通过

重置索引
df.reset_index(drop=True)
print df
   click    id  location
0      0   123       321
1      0  1543       432
2      1   421       123
3      1   436      1543