【问题标题】:pandas merge two dataframe and sort by compared column in adjacent column熊猫合并两个数据框并按相邻列中的比较列排序
【发布时间】:2022-11-27 06:07:10
【问题描述】:

我比较了两个数据框,结果如下所示;

import pandas as pd

exam_1 = {
  'Name': ['Jonn', 'Tomas', 'Fran', 'Olga', 'Veronika', 'Stephan'],
  'Mat': [85, 75, 50, 93, 88, 90],
  'Science': [96, 97, 99, 87, 90, 88],
  'Reading': [80, 60, 72, 86, 84, 77],
  'Wiritng': [78, 82, 88, 78, 86, 82],
  'Lang': [77, 79, 77, 72, 90, 92],
}

exam_2 = {
  'Name': ['Jonn', 'Tomas', 'Fran', 'Olga', 'Veronika', 'Stephan'],
  'Mat': [80, 80, 90, 90, 85, 80],
  'Science': [50, 60, 85, 90, 66, 82],
  'Reading': [60, 75, 55, 90, 85, 60],
  'Wiritng': [56, 66, 90, 82, 60, 80],
  'Lang': [80, 78, 76, 90, 77, 66],
}

df_1 = pd.DataFrame(exam_1)
df_2 = pd.DataFrame(exam_2)

cmp = pd.merge(df_1, df_2, how="outer", on=["Name"], suffixes=("_1", "_2"))
print(cmp)
       Name  Mat_1  Science_1  Reading_1  Wiritng_1  Lang_1  Mat_2  Science_2  Reading_2  Wiritng_2  Lang_2
0      Jonn     85         96         80         78      77     80         50         60         56      80
1     Tomas     75         97         60         82      79     80         60         75         66      78
2      Fran     50         99         72         88      77     90         85         55         90      76
3      Olga     93         87         86         78      72     90         90         90         82      90
4  Veronika     88         90         84         86      90     85         66         85         60      77
5   Stephan     90         88         77         82      92     80         82         60         80      66

但我想在相邻的列中看到 Mat_1 和 Mat_2 以及其他列。

我尝试手动执行此操作,但是否有任何简单的方法可以像已经内置的功能一样执行此操作。

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    您可以在axis=1 上使用pandas.DataFrame.sort_index。

    替换这个:

    cmp = pd.merge(df_1, df_2, how="outer", on=["Name"], suffixes=("_1", "_2"))
    

    这样 :

    cmp = (
            pd.merge(df_1, df_2, how="outer", on=["Name"], suffixes=("_1", "_2"))
                .set_index("Name")
                .sort_index(axis=1)
                .reset_index()
          )
    ​
    

    # 输出 :

    print(cmp.to_string()) 
    ​
           Name  Lang_1  Lang_2  Mat_1  Mat_2  Reading_1  Reading_2  Science_1  Science_2  Wiritng_1  Wiritng_2
    0      Jonn      77      80     85     80         80         60         96         50         78         56
    1     Tomas      79      78     75     80         60         75         97         60         82         66
    2      Fran      77      76     50     90         72         55         99         85         88         90
    3      Olga      72      90     93     90         86         90         87         90         78         82
    4  Veronika      90      77     88     85         84         85         90         66         86         60
    5   Stephan      92      66     90     80         77         60         88         82         82         80
    

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2019-09-27
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多