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
添加回答
舉報