我有兩個(gè)數(shù)據(jù)框。DF1:Page LineNum Value1 1 0.51 2 0.61 3 0.72 1 0.92 2 0.4DF2:初始數(shù)據(jù)幀是前三列,我必須生成名為New_Value的第四列。Page LineNum Word New_Value1 1 g1 0.51 1 g2 0.51 1 g3 0.51 1 g4 0.51 2 g5 0.61 2 g6 0.61 3 g7 0.71 3 g8 0.7...我必須生成DF2的第四列,該列實(shí)際上是從DF1的唯一“ Page”和“ LineNum”值映射的。在DF2中,只是根據(jù)DF1中相對于“頁面”和“ LineNum”的唯一值重復(fù)這些值。我目前正在通過for循環(huán)執(zhí)行此操作: for index, row in DF1.iterrows(): DF2.ix[((DF2['Page'] == row['Page']) & (DF2['LineNum'] == row['LineNum'])),['New_Value']] = row['Value']這絕對可以,但是兩個(gè)數(shù)據(jù)幀都很大。所以我需要一些優(yōu)化的功能,也許使用groupby和lambda,但無法設(shè)計(jì)出確切的功能。請?zhí)岢鰶]有For循環(huán)的優(yōu)化版本。如果還有其他需要我解釋的內(nèi)容,請發(fā)表評論。我正在使用Python3和pandas。
1 回答

嗶嗶one
TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
我認(rèn)為需要merge左連接:
df = (df2.merge(df1.rename(columns={'Value':'New_Value'}),
on=['Page','LineNum'], how='left'))
print (df)
Page LineNum Word New_Value
0 1 1 g1 0.5
1 1 1 g2 0.5
2 1 1 g3 0.5
3 1 1 g4 0.5
4 1 2 g5 0.6
5 1 2 g6 0.6
6 1 3 g7 0.7
7 1 3 g8 0.7
添加回答
舉報(bào)
0/150
提交
取消