簡體   English   中英

pandas 合並兩個 dataframe 並按相鄰列中的比較列排序

[英]pandas merge two dataframe and sort by compared column in adjacent column

我比較了兩個 dataframe,結果如下所示;

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 以及其他列。

我嘗試手動執行此操作,但是否有任何簡單的方法可以像內置的 function 那樣執行此操作。

您可以在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()
      )
​

#Output:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM