Как удалить строки из фрейма данных Pandas, если такая же строка существует в другом фрейме данных, но в итоге все столбцы из обоих df

2
задан user8322222 16 January 2019 в 14:22
поделиться

2 ответа

Вы можете использовать левое соединение, чтобы получить только id в первом кадре данных, но не во втором, а также сохранить все столбцы вторых кадров данных.

import pandas as pd

df1 = pd.DataFrame(
    data={"id": [1, 2, 3, 4], "col1": [9, 8, 7, 6], "col2": [5, 4, 3, 2]},
    columns=["id", "col1", "col2"],
)
df2 = pd.DataFrame(
    data={"id": [3, 4, 7], "col3": [11, 12, 13], "col4": [15, 16, 17]},
    columns=["id", "col3", "col4"],
)

df_1_2 = df1.merge(df2, on="id", how="left", indicator=True)

df_1_not_2 = df_1_2[df_1_2["_merge"] == "left_only"].drop(columns=["_merge"])

, который возвращает

   id  col1  col2  col3  col4
0   1     9     5   NaN   NaN
1   2     8     4   NaN   NaN
0
ответ дан kfoley 16 January 2019 в 14:22
поделиться

Похоже, что простой drop будет работать для того, что вы хотите:

df1.drop(df2.index, errors='ignore', axis=0)

     col1  col2
ID            
1      9     5
2      8     4

Обратите внимание, что это предполагает, что ID является индексом, в противном случае используйте [ 114] :

df1[~df1.ID.isin(df2.ID)]

    ID  col1  col2
0   1     9     5
1   2     8     4
0
ответ дан yatu 16 January 2019 в 14:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: