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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了附加两个具有相同列,不同顺序的数据帧相关的知识,希望对你有一定的参考价值。

我有两个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的列名相同,但顺序不同。列中也没有连接。

答案

你也可以使用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.appendpd.concatDataFrame.append具有处理各种类型输入的代码,例如Series,元组,列表和dicts。如果你传递一个DataFrame,它会直接传递给pd.concat,所以使用pd.concat更直接。

另一答案

对于未来的用户(有时> pandas 0.23.0):

您可能还需要添加sort = True以在非连接轴尚未对齐时对其进行排序(即保留OP所需的连接行为)。我使用上面提供的代码并得到警告,请参阅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
另一答案

您可以使用追加

 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

以上是关于附加两个具有相同列,不同顺序的数据帧的主要内容,如果未能解决你的问题,请参考以下文章

当它们具有不同的列集时,按行组合两个数据帧(rbind)

将火花数据框附加到具有不同列顺序的配置单元表

在R中将具有不同长度和两个条件的不同数据帧的列相乘

Python Pandas - 具有不同列的 Concat 数据框忽略列名

检查panda数据帧中的多个列是否重合并在新列中标记它们

使用具有相同字符串但顺序不同的列合并两个 data.frame