我有一個資料框,如果 id 值相同,我想在其中附加值。我不希望在我的 df1 資料框中有重復的行
資料
df1
id stat
aa11rr y
aa11rr y
aa11rr y
bb123 n
bb123 n
df2
loco country temp
aa11rr ny 55
aa11rr ny 60
aa11rr ny 65
bb123 ca 75
bb123 ca 70
aa11rr ny 70
bb123 ca 90
bb123 ca 95
期望的
id stat loco country temp
aa11rr y aa11rr ny 55
aa11rr y aa11rr ny 55
aa11rr y aa11rr ny 60
bb123 n bb123 ca 75
bb123 n bb123 ca 70
正在做
pd.concat([df1, df2.reindex(df1.index)], axis=1)
但是,我希望我的較小資料集的行數不超過開始時的行數
uj5u.com熱心網友回復:
IIUC
extract = lambda x: pd.merge(x, df2, left_on='id', right_on='loco').head(len(x))
out = df1.groupby('id').apply(extract).reset_index(drop=True)
print(out)
# Output
id stat loco country temp
0 aa11rr y aa11rr ny 55
1 aa11rr y aa11rr ny 60
2 aa11rr y aa11rr ny 65
3 bb123 n bb123 ca 75
4 bb123 n bb123 ca 70
uj5u.com熱心網友回復:
我不確定您的示例是否反映了您想要做的事情。但是,將所有行從它們同意的位置df2獲取,df1df1.iddf2.loco稱為左外連接。pandas.DataFrame.merge()你可以通過方法做到這一點。檔案在這里。這應該可以解決問題:
df1.merge(df2, left_on='id', right_on='loco', how='left')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410479.html
標籤:
上一篇:Python在字串末尾洗掉0
