[英]merge two datasets where there is a one to one correspondence
這是我想做的一個例子:
df1
cola colb coldc
A 101 green
B 101 blue
C 102 green
.
df2
cold othercols
A .
B .
C .
.
cola
和cold
是等價的,但命名不同,它們都與colb
和colc
的組合一一對應。 我想:
df2
cold othercols cole
A . 101green
B . 101blue
C . 102green
. . .
將colb
和colc
結合起來,然后根據它們的一一對應將其與cold
匹配。
到目前為止我已經嘗試過
df2= pd.merge(df2,
df1,
how='left', left_on=['cold'],right_on=['colb', 'colc'])
這將返回合並的 dataframe ,其中收到的所有列都是nan
及其變體 - 我不確定 pd.merge 是否可以在這里使用。
並且:
df2['cole'] = \
df2[['colb',
'colc']].astype(str).sum(axis=1)
mapping = df2.set_index('cola')['cole']
mapping.groupby(mapping.index).first() # drop duplicates
df1['cole'] = df1['cold'].map(mapping)
返回錯誤 InvalidIndexError: Reindexing only valid with unique value Index objects
即使我刪除了映射系列的重復項。
任何幫助表示贊賞 - 謝謝!
你需要兩個不同的東西:
1 - 合並df1
和df2
:
df2 = df2.merge(df1, left_on='cold', right_on='cola', how='left')
2 - colb
和colc
:
df2['cole'] = df2['colb'].astype(str) + df2['colc'].astype(str)
你可以跑
df2['cole'] = [str(aa) + str(cc) for zip (aa, cc) in zip(df2.colb, df2.colc)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.