比较两个数据帧时出错,列名为Sam

2024-05-19 23:02:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,我试图比较这两个数据帧,所以如果df1的值在df中,就删除这一行。我列出了这两列,它们的名字一模一样。你知道吗

df   Permit Number  Sub Permit   
     BLD-00045         NaN          
     ELE-2019        BLD-00045     
     PLM-2018        BLD-00045     
df1  Permit Number    Sub Permit    
     BLD-00001         NaN          
     ELE-2019         BLD-00045     
     PLM-7777         BLD-00045     

在下面的代码中,我重命名了另一个数据帧(df3)中的列,以便将它们合并到一个新的数据帧(df1)中。我尝试将索引设置为许可值,但不希望删除索引(因为我希望保留许可编号),然后比较它们。你知道吗

我的目标是保留BLD-00045和PLM-2018行,但是删除ELE-2019,因为这两个数据帧之间是相等的。你知道吗

df3.rename(columns={'permit_num': "Permit Number"}, inplace=True)
df1 = pd.merge(df, df3, on='Permit Number')
df.set_index('Permit Number', inplace=False)
df1.set_index('Permit Number', inplace=False)
df = df.loc[df['Permit Number'] != df1['Permit Number']]
print(df)

我不断得到ValueError:只能比较相同标记的Series对象。你知道吗


Tags: 数据falsenumberdfindexnanplmdf1
2条回答

一种方法是使用isin~来反转逻辑

例如:

print(df.loc[df['Permit Number'].isin(df1['Permit Number'])])
      Permit Number Sub Permit
1      ELE-2019  BLD-00045

如果我正确理解你的逻辑,你想删除上面的行^

print(df.loc[~df['Permit Number'].isin(df1['Permit Number'])])

您可以通过添加~来实现这一点,它可以反转逻辑或充当not isin。你知道吗

      Permit Number Sub Permit
0     BLD-00045        NaN
2      PLM-2018  BLD-00045
df2 = df.merge(df1, how='outer', indicator=True)
df3 = df2[df2['_merge']=='left_only'].drop(labels='_merge', axis=1)

IIUC,您只需要df中存在的行,而不需要df1中的行。你知道吗

相关问题 更多 >