3 回答
TA贡献1788条经验 获得超4个赞
您的语法已关闭
temp2
。首先,你忘记了引号。其次,它应该'temp1'
代替temp2
.您合并了两列。如果你只在 上合并
Id
,那么你就不会有NaN
值。但是,由于您在 上合并temp1
,因此存在一些数据在数据帧中不匹配。第二个数据帧中的列中没有S
值,因此您会期望合并后的值。Name
NaN
S
如果您现在的目标是
NaN
用不同的方法填充这些值,那么您就可以做到。这就是您想要做的,现在只需合并而Id
不是Id
andtemp1
。你是这个意思吗?
x= df1.assign(temp1 = df1.groupby ('Name').cumcount())
y= df2.assign(temp1 = df2.groupby ('Name').cumcount())
xy= x.merge(y, on=['Name','temp1'],how='left').drop('temp1')
xy
Out[1]:
Name Region Id
0 P Asia 1234.0
1 Q Eur 1244.0
2 R Africa 1233.0
3 S NaN NaN
4 R Africa NaN
5 R Africa NaN
6 S NaN NaN
TA贡献1111条经验 获得超0个赞
有什么原因不能使用 pandas merge 吗?
name_list = ['P','Q','R','S','R','R','S']
country_list = ['Asia','Eur','Africa','NA','Africa','Africa','NA']
df1 = pd.DataFrame({'Name':name_list,'Region':country_list})
df2 = pd.DataFrame({'Name':['P','Q','R'],'Id':[1234,1244,1233]})
result = pd.merge(df1,df2,on='Name',how='left')
print(result)
输出:
Name Region Id
0 P Asia 1234.0
1 Q Eur 1244.0
2 R Africa 1233.0
3 S NA NaN
4 R Africa 1233.0
5 R Africa 1233.0
6 S NA NaN
TA贡献1735条经验 获得超5个赞
你为什么要合并cumcount()?这样,您只需将它们一对一合并。只需合并:
df1.merge(df2, on='Name', how='outer')
输出:
Name Region Id
0 P Asia 1234.0
1 Q Eur 1244.0
2 R Africa 1233.0
3 R Africa 1233.0
4 R Africa 1233.0
5 S NaN NaN
6 S NaN NaN
添加回答
举报