【发布时间】:2021-09-29 08:55:17
【问题描述】:
假设我有以下 main df:
df = pd.DataFrame({'name':['Sara', 'John', 'Christine']})
df:
name
0 Sara
1 John
2 Christine
现在我有另外 4 个 dfs,其中 3 个用户名具有年龄和等级,但 NaN 排列不同:
df2 = pd.DataFrame({'name':['Sara', 'John', 'Christine'],
'age': [26, 30, np.nan]})
df3:
df3 = pd.DataFrame({'name': ['Sara', 'John', 'Christine'],
'age': [np.nan, 30, 24]})
df4:
df4 = pd.DataFrame({'name': ['Sara', 'John', 'Christine'],
'grade': [np.nan, 1, 3]})
df5:
df5 = pd.DataFrame({'name': ['Sara', 'John', 'Christine'],
'grade': [12, np.nan, 3]})
我想将 4 个数据帧中的数据合并到 name 列上的主 df 并删除 NaN。
到目前为止我做了什么:
创建了一个 dfs 列表:
dfs = [df,df2,df3,df4,df5]
使用reduce:
from functools import reduce
df_final = reduce(lambda left,right: pd.merge(left,right,on='name'), dfs)
df_final:
name age_x age_y grade_x grade_y
0 Sara 26.0 NaN NaN 12.0
1 John 30.0 30.0 1.0 NaN
2 Christine NaN 24.0 3.0 3.0
预期输出:
df_final:
name age grade
0 Sara 26.0 12
1 John 30.0 1.0
2 Christine 24.0 3.0
【问题讨论】:
标签: python python-3.x pandas dataframe