【问题标题】:How to show matching rows of two columns in a multi index dataframe?如何在多索引数据框中显示两列的匹配行?
【发布时间】:2022-11-05 17:59:34
【问题描述】:

我想显示 sub_col1 和 sub_col2 中具有多索引数据框的匹配行。 我该怎么做?

这是我的数据框

multi_index = pd.MultiIndex.from_tuples([("r0", "rA"),
                                       ("r1", "rB"),
                                       ("r4", "rB")],
                                       names=['Courses','Fee'])
cols = pd.MultiIndex.from_tuples([("col1", "sub_col1"), 
                                  ("col2", "sub_col2")])
data=[[100,300], [200,500], [500,200]]

df = pd.DataFrame(data, columns=cols,index=multi_index)

我想从这个开始:

到这个预期的输出:

【问题讨论】:

    标签: python pandas dataframe comparison multi-index


    【解决方案1】:

    这是使用 Pandas apply 和 concat 的一种方法:

    # Check for corresponding values
    df[("col2", "sub_col2")] = df.apply(
        lambda x: x[("col1", "sub_col1")]
        if x[("col1", "sub_col1")] in df[("col2", "sub_col2")].tolist()
        else x[("col2", "sub_col2")],
        axis=1,
    )
    
    # Reorder the dataframe
    df = pd.concat(
        [
            df[df[("col1", "sub_col1")] == df[("col2", "sub_col2")]],
            df[df[("col1", "sub_col1")] != df[("col2", "sub_col2")]],
        ]
    ).reset_index(drop=True)
    
          col1     col2
      sub_col1 sub_col2
    0      200      200
    1      500      500
    2      100      300
    

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多