Вы можете использовать левое соединение, чтобы получить только 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
Похоже, что простой 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