繁体   English   中英

python&pandas-删除行,其中列值是另一个DataFrame中的索引值

[英]python & pandas - Drop rows where column values are index values in another DataFrame

原始DataFrame( df1 )看起来像:

  NoUsager Sens NoAdresse Fait  Weekday NoDemande  Periods
 0 000001   +    000079    1     Dim   42191000972 Soir 
 1 001875   +    005018    1     Dim   42191001052 Matin 
 2 001651   +    005018    1     Dim   42191001051 Matin 
 3 001486   +    000405    1     Dim   42191001250 Matin 
 4 002021   +    005712    1     Dim   42191000013 Matin 
 5 001975   +    005712    1     Dim   42191000012 Matin 
 6 001304   +    001408    1     Dim   42191000371 Matin 
 7 001355   +    005021    1     Dim   42191000622 Matin 
 8 002274   +    006570    1     Dim   42191001053 Matin 
 9 000040   +    004681    1     Dim   42191002507 Soir

我使用crosstab生成了一个新index = NoDemande, NoUsager, Periodsdf2 ),其index = NoDemande, NoUsager, Periodscolumns = ['Sens']

                       Sens  + - 
NoDemande  NoUsager Periods
42191000622 001355  Matin    1 2 
42191000959 001877  Matin    1 2 
42191001325 000627  Soir     1 2 
42191001412 000363  Matin    1 2 
42191001424 000443  Soir     1 2 
42191001426 001308  Soir     1 2 
42191002507 000040  Soir     2 0 
42193000171 000257  Soir     1 2 
42193000172 002398  Soir     1 2 

我想删除df1中的所有行,其中NoUsagerNoDemande列中的值与索引NoUsagerNoDemande中的df2 因此,结果将返回具有相同df1格式但没有line7line9的新DataFrame df3

我试过了:

df3 = df1.loc[~df1['NoDemande','NoUsager'].isin([df2.NoDemande,df2.NoUsager])]

但返回了: KeyError: ('NoDemande', 'NoUsager')

我怎么解决这个问题?

任何帮助将不胜感激!

cols = ['NoDemande','NoUsager']
mask = df1[cols].isin(df2.reset_index()[cols].to_dict('list'))
df1[~mask.all(1)]

在此处输入图片说明


您做错了三件事。

  1. df1['NoDemande','NoUsager']需要为df1[['NoDemande','NoUsager']]

  2. df2具有名称为['NoDemande','NoUsager']索引级别。 您必须重置索引才能将它们重新变成列。

  3. 当使用isin用于此目的,变换df2.reset_index()[['NoDemande','NoUsager']]到字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM