【问题标题】:Joining pandas dataframes where indexes have different number of ordered rows加入索引具有不同数量的有序行的熊猫数据框
【发布时间】:2017-06-20 19:19:11
【问题描述】:

如果某个模式的分数为 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

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

【问题讨论】:

    标签: python pandas merge


    【解决方案1】:

    只做一个外连接:

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

    pandas.DataFrame.merge Documentation

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 2014-04-19
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 2020-12-02
      • 2020-08-21
      相关资源
      最近更新 更多