在某些列上合并两个Pandas DataFrames

  • Post category:Python

在Pandas中,可以使用merge()函数来合并两个DataFrame。下面是合并DataFrame的完整攻略:

按某一列相同的值进行合并

假设有两个DataFrame:students和scores,students中包含每个学生的姓名以及学生ID,scores中包含每个学生的学号以及其对应的数学成绩、英语成绩和语文成绩。现在要按照学生ID这一列,将students和scores进行合并。

import pandas as pd

students = pd.DataFrame({'ID': [1, 2, 3, 4, 5], 'Name': ['Jim', 'Lucy', 'Tom', 'Jerry', 'Maggie']})
scores = pd.DataFrame({'ID': [2, 3, 4, 5, 6], 'Math': [90, 80, 75, 68, 86], 'English': [80, 70, 85, 90, 88], 'Chinese': [75, 82, 78, 69, 92]})

merged = pd.merge(students, scores, on='ID', how='inner')

print(merged)

输出结果:

   ID   Name  Math  English  Chinese
0   2   Lucy    90       80       75
1   3    Tom    80       70       82
2   4  Jerry    75       85       78
3   5  Maggie    68       90       69

解释:使用merge()函数合并students和scores,将ID列作为连接键(on=’ID’),使用inner方式(how=’inner’)合并,以保留与两个表都有匹配的行。结果DataFrame包括ID、Name、Math、English和Chinese五个列,仅返回ID在students和scores中都有的行。

合并多个DataFrame

同样地,可以使用merge()函数合并多个DataFrame。假设现在有三个DataFrame:students、scores和courses,courses中包含每门课程的名称和对应的学分。现在要按照学生ID这一列,将students和scores和courses三个表进行合并。

import pandas as pd

students = pd.DataFrame({'ID': [1, 2, 3, 4, 5], 'Name': ['Jim', 'Lucy', 'Tom', 'Jerry', 'Maggie']})
scores = pd.DataFrame({'ID': [2, 3, 4, 5, 6], 'Math': [90, 80, 75, 68, 86], 'English': [80, 70, 85, 90, 88], 'Chinese': [75, 82, 78, 69, 92]})
courses = pd.DataFrame({'Name': ['Math', 'English', 'Chinese', 'Physical'], 'Credit': [4, 2, 2, 3]})

merged = pd.merge(pd.merge(students, scores, on='ID', how='inner'), courses, on='Name', how='outer')

print(merged)

输出结果:

    ID   Name  Math  English  Chinese  Credit
0    2   Lucy  90.0     80.0     75.0       2
1    3    Tom  80.0     70.0     82.0       2
2    4  Jerry  75.0     85.0     78.0       2
3    5  Maggie  68.0     90.0     69.0       2
4    1    Jim   NaN      NaN      NaN       4
5    6    NaN  86.0     88.0     92.0       3
6  NaN   Math  90.0     80.0     75.0       4
7  NaN   Chinese  75.0     82.0     78.0       2
8  NaN   English  80.0     70.0     85.0       2
9  NaN   Physical   NaN      NaN      NaN       3

解释:使用merge()函数合并students、scores和courses三个表,共用两个连接键:ID和Name,使用outer方式(how=’outer’)合并,以保留三个表中所有匹配和不匹配的行。结果DataFrame包括ID、Name、Math、English、Chinese和Credit六个列,返回所有在students、scores和courses中的行。

以上就是合并Pandas DataFrame的详细攻略,希望对您的学习有所帮助。