按相应列中的值对2个数据框进行排序和对齐

时间:2018-07-18 03:48:54

标签: python pandas dataframe

我有2个要排序的数据框,其结构与下面显示的结构类似,但是仅查看前3列时,值的行是混乱的。如何对数据框进行排序以使行索引匹配?

也可能发生这样的情况,即可能没有匹配的行,在这种情况下,我想在该索引的另一个数据框中创建一个空白条目。我将如何去做呢?

Dataframe1:
     Col1 Col2 Col3 Col4
0       a    b    c    1
1       b    c    d    4
2       f    e    g    5

Dataframe2:
     Col1 Col2 Col3 Col4
0       f    e    g    6
1       a    b    c    5
2       b    c    d    3

2 个答案:

答案 0 :(得分:0)

这是您想要的吗?:

import pandas as pd
df=pd.DataFrame({'a':[1,3,2],'b':[4,6,5]})
print(df.sort_values(df.columns.tolist()))

输出:

   a  b
0  1  4
2  2  5
1  3  6

答案 1 :(得分:0)

  

如何对数据框进行排序以使行索引匹配

您可以按应该确定两个数据帧和重置索引顺序的列进行排序。

cols = ['Col1', 'Col2', 'Col3']
df1.sort_values(cols).reset_index(drop=True)
#outputs:
  Col1 Col2 Col3  Col4
0    a    b    c     1
1    b    c    d     4
2    f    e    g     5

df2.sort_values(cols).reset_index(drop=True)
#outputs:
  Col1 Col2 Col3  Col4
0    a    b    c     5
1    b    c    d     3
2    f    e    g     6
  

...可能没有匹配的行,在这种情况下,我想在该索引的另一个数据框中创建一个空白条目

让df1再增加1行

df1 = pd.DataFrame({
  'Col1': list('abfh'),
  'Col2': list('bceg'),
  'Col3': list('cdgi'),
  'Col4': [1,4,5,7]
})

df1
# outputs:
  Col1 Col2 Col3  Col4
0    a    b    c     1
1    b    c    d     4
2    f    e    g     5
3    h    g    i     7

我们可以使用外部联接df2添加空白行,其中pd.Nan中的每一列都位于索引3

如果已经对两个数据库都进行了排序,则可以使用索引进行合并

df3 = df1.merge(df2, 'left', left_index=True, right_index=True, suffixes=('_x', ''))

否则,在*应*确定排序顺序的列上合并,这将创建一个具有联接值的新数据框,其排序方式与df1排序方式相同

df3 = df1.merge(df2, 'left', on=cols, suffixes=('_x', ''))

然后从左侧数据框中过滤出列

df3.iloc[:, ~df3.columns.str.endswith('_x')]
#outputs:
  Col1 Col2 Col3  Col4
0    f    e    g   6.0
1    a    b    c   5.0
2    b    c    d   3.0
3  NaN  NaN  NaN   NaN