Правильно объединить ряды различной длины на фрейме - PullRequest
0 голосов
/ 14 ноября 2018

Настройка

У меня есть df1,

     A    B   name
0  ABC  DEF  test1
1  UVW  XYZ  test2

и df2,

   C   name
0  1  test1

и df3,

   C  D   name
0  1  1  test2

такой, что df12 = pd.merge(df1, df2, on=['name']) дает,

     A    B   name  C
0  ABC  DEF  test1  1

и df13 = pd.merge(df1, df3, on=['name']) т,

     A    B   name  C  D
0  UVW  XYZ  test2  1  1

Задача

Как мне впоследствии добавить сначала df2, а затем df3 к df1, чтобы я получил df123, который выглядит как

     A    B   name  C  D
0  ABC  DEF  test1  1  NaN
1  UVW  XYZ  test2  1  1

Мне нужно иметь возможность построить df123 в цикле.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Использование combine_first с set_index()

df1=df1.set_index('name')
df1.combine_first(df2.set_index('name')).combine_first(df3.set_index('name'))
Out[144]: 
         A    B    C    D
name                     
test1  ABC  DEF  1.0  NaN
test2  UVW  XYZ  1.0  1.0
0 голосов
/ 14 ноября 2018

Используйте append и merge:

df = df1.merge(df2.append(df3, sort=False),on='name')

print(df)
     A    B   name  C    D
0  ABC  DEF  test1  1  NaN
1  UVW  XYZ  test2  1  1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...