Pandas Merge - приносит одинаковые значения столбцов на основе ключей - PullRequest
1 голос
/ 14 октября 2019

У меня есть 3 таких кадра,

df = pd.DataFrame([[1, 3], [2, 4], [3,6], [4,12], [5,18]], columns=['A', 'B'])
df2 = pd.DataFrame([[1, 5], [2, 6], [3,9]], columns=['A', 'C'])
df3 = pd.DataFrame([[4, 15, "hello"], [5, 19, "yes"]], columns=['A', 'C', 'D'])

Они выглядят так, дф

    A   B
0   1   3
1   2   4
2   3   6
3   4   12
4   5   18

дф2

    A   C
0   1   5
1   2   6
2   3   9

дф3

   A    C   D
0   4   15  hello
1   5   19  yes

мои слияния, первое слияние,

f_merge = pd.merge(df, df2, on='A',how='left')

второе слияние, (first_merge с df3)

s_merge = pd.merge(f_merge, df3, on='A', how='left')

Я получаю вывод, подобный этому,

    A   B   C_x  C_y       D
0   1   3   5.0  NaN      NaN
1   2   4   6.0  NaN      NaN
2   3   6   9.0  NaN      NaN
3   4   12  NaN  15.0     hello
4   5   18  NaN  19.0     yes

Мне нужно вот так,

    A   B   C        D
0   1   3   5.0     NaN
1   2   4   6.0     NaN
2   3   6   9.0     NaN
3   4   12  15.0    hello
4   5   18  19.0    yes

Как мне добиться этого результата? Любое предложение было бы замечательно.

Ответы [ 2 ]

3 голосов
/ 14 октября 2019

Concat df2 и df3 перед объединением.

new_df = pd.merge(df, pd.concat([df2, df3], ignore_index=True), on='A')

new_df

Out: 
   A   B   C      D
0  1   3   5    NaN
1  2   4   6    NaN
2  3   6   9    NaN
3  4  12  15  hello
4  5  18  19    yes
2 голосов
/ 14 октября 2019

Мы можем сделать combine_first

df.set_index('A',inplace=True)
df2.set_index('A').combine_first(df).combine_first(df3.set_index('A'))
      B     C      D
A                   
1   3.0   5.0    NaN
2   4.0   6.0    NaN
3   6.0   9.0    NaN
4  12.0  15.0  hello
5  18.0  19.0    yes
...