簡體   English   中英

合並兩個存在一一對應關系的數據集

[英]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    .
.

colacold是等價的,但命名不同,它們都與colbcolc的組合一一對應。 我想:

df2
cold othercols cole
A    .         101green 
B    .         101blue
C    .         102green
.    .         .

colbcolc結合起來,然后根據它們的一一對應將其與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 - 合並df1df2

df2 = df2.merge(df1, left_on='cold', right_on='cola', how='left')

2 - colbcolc

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM