我有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
答案 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