Объединить Pandas фреймы данных в столбце, и результат будет отсортирован по тому же столбцу - PullRequest
0 голосов
/ 09 апреля 2020

Допустим, у меня есть эти два фрейма данных:

>>> import pandas as pd

>>> df1 = pd.DataFrame({"key":[1,3,5], "columnA":[30,40,50]})
>>> df1
   key  columnA
0    1       30
1    3       40
2    5       50

>>> df2 = pd.DataFrame({"key":[2,4], "columnB":[60,70]})
>>> df2
   key  columnB
0    2       60
1    4       70

Я в основном хочу новый фрейм данных с ключом, столбцом A и столбцом B, где соответствующие данные «чередуются» из два вышеупомянутых кадра данных, соответственно. Я сделал это:

>>> pd.merge(df1, df2, on='key', how='outer').astype('Int64')
   key  columnA  columnB
0    1       30     <NA>
1    3       40     <NA>
2    5       50     <NA>
3    2     <NA>       60
4    4     <NA>       70

... что близко - но я хочу, чтобы результат был:

   key  columnA  columnB
0    1       30     <NA>
1    2     <NA>       60
2    3       40     <NA>
3    4     <NA>       70
4    5       50     <NA>

Как мне этого добиться?

Ответы [ 2 ]

4 голосов
/ 09 апреля 2020

Вы можете использовать sort_values, а затем reset_index для достижения ожидаемого результата.

In [778]: pd.merge(df1, df2, on='key', how='outer').astype('Int64').sort_values('key').reset_index().drop('index',1)                                                                                
Out[778]: 
   key  columnA  columnB
0    1       30     <NA>
1    2     <NA>       60
2    3       40     <NA>
3    4     <NA>       70
4    5       50     <NA>

Или вы можете передать ignore_index=True в sort_values сам параметр:

In [795]: pd.merge(df1, df2, on='key', how='outer').astype('Int64').sort_values('key', ignore_index=True)                                                                                                   
Out[795]: 
   key  columnA  columnB
0    1       30     <NA>
1    2     <NA>       60
2    3       40     <NA>
3    4     <NA>       70
4    5       50     <NA>
1 голос
/ 09 апреля 2020

Используйте DataFrame.sort_values с параметрами DataFrame.reset_index и drop=True:

df = (pd.merge(df1, df2, on='key', how='outer')
        .astype('Int64')
        .sort_values('key')
        .reset_index(drop=True))
print (df)
   key  columnA  columnB
0    1       30      NaN
1    2      NaN       60
2    3       40      NaN
3    4      NaN       70
4    5       50      NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...