Python Pandas 数据合并/融合 merge 数据过滤 isin
Pandas 数据合并/融合,数据过滤
数据准备:
import pandas as pd
# 假设有 5 个人,分别参加了 4 门课程,获得了对应的分数
# 同时这个 5 个人分别负责的项目个数 在 'Project_num' 列中显示
data_1 = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ella']),
'English' : pd.Series([3, 2.6, 2, 1.7, 3]),
}
data_2 = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ford']),
'Math' : pd.Series([1.1, 2.2, 3.3, 4.4, 5]),
}
df_1 = pd.DataFrame(data_1)
df_2 = pd.DataFrame(data_2)
print('df_1)
print('\n')
print(df_2)
print('\n')
运行结果:
df_1:
name English
0 Alice 3.0
1 Bob 2.6
2 Cathy 2.0
3 Dany 1.7
4 Ella 3.0
df_2:
name Math
0 Alice 1.1
1 Bob 2.2
2 Cathy 3.3
3 Dany 4.4
4 Ford 5.0
一、数据合并 pd.merge
1.1 把右边的数据融合到左边
df_3 = pd.merge(df_1, df_2, how = 'left', on = 'name')
# 将 df_2 融合进 df_1,以 'name' 这一列为筛选原则
# 我们可以 同时对多列进行筛选 on = ['column_1', 'column_2']
print(df_3)
print('\n')
运行结果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
4 Ella 3.0 NaN
1.2 把左边的数据融合到右边
df_3 = pd.merge(df_1, df_2, how = 'right', on = 'name')
# 将 df_1 融合进 df_2,以 'name' 这一列为筛选原则
print(df_3)
print('\n')
运行结果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
4 Ford NaN 5.0
1.3 取交集
df_3 = pd.merge(df_1, df_2, how = 'inner', on = 'name')
# 默认为取交集
print(df_3)
print('\n')
运行结果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
1.4 取并集
df_3 = pd.merge(df_1, df_2, how = 'outer', on = 'name')
print(df_3)
print('\n')
运行结果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
4 Ella 3.0 NaN
5 Ford NaN 5.0
二、数据过滤 isin
2.1 对原数据集进行筛选,留下与新数据集交集的行数据
df_4 = df_1[df_1.name.isin(df_2.name)]
print(df_4)
print('\n')
运行结果:
name English
0 Alice 3.0
1 Bob 2.6
2 Cathy 2.0
3 Dany 1.7
2.2 对原数据集进行筛选,去除与新数据集交集的行数据(留下不在新数据集中的行)
df_4 = df_1[~df_1.name.isin(df_2.name)]
print(df_4)
print('\n')
运行结果:
name English
4 Ella 3.0