加入pandas数据帧,其中索引具有不同数量的有序行

时间:2017-06-20 19:19:11

标签: python pandas merge

如果模式的分数为80或更高,则df1和df2具有行。每个模式的行按从最高到最低的顺序排列。

DF1:

>>> df1 = pd.DataFrame({'pattern': ['a','a','b'],'score':[100, 80, 85]})
>>> df1.set_index('pattern',inplace=True)
>>> df1
         score
pattern       
a          100
a           80
b           85

DF2:

>>> df2 = pd.DataFrame({'pattern': ['a','b'],'score':[90, 95]})
>>> df2.set_index('pattern',inplace=True)
>>> df2
         score
pattern       
a           90
b           95

我想要一个合并的数据框,其中每个模式的最高分数在同一行,每个模式的第二高分数在下面的行上,依此类推。 df1或df2中的任何行都需要在合并的数据帧中。如果df1中的模式有更多分数,那么我想要df2的单元格中的默认值,如null,0,-1(不重要):

score_df1 score_df2 pattern
a 100 90 a 80 0 b 85 95

如果df1的模式行数多于df2(或反之亦然),我可以重复分数:

>>> pd.merge(df1, df2, left_index=True, right_index=True, suffixes=['_df1','_df2']) score_df1 score_df2 pattern
a 100 90 a 80 90 b 85 95

但是如何获取默认/空值?

1 个答案:

答案 0 :(得分:0)

只做外连接:

pd.merge(df1, df2, left_index=True, right_index=True, suffixes=['_df1','_df2'], how='outer')

pandas.DataFrame.merge Documentation