原始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


我使用crosstabdf2index = NoDemande, NoUsager, Periods生成一个新的(columns = ['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中的值相同。因此,结果将返回具有相同df3格式但没有df1line7的新DataFrame line9

我试过了:

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)]


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



您做错了三件事。


df1['NoDemande','NoUsager']必须为df1[['NoDemande','NoUsager']]
df2具有名称为['NoDemande','NoUsager']的索引级别。您必须重置索引才能将它们重新变成列。
为此目的使用isin时,请将df2.reset_index()[['NoDemande','NoUsager']]转换为字典。

关于python - python&pandas-删除行,其中列值是另一个DataFrame中的索引值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39391816/

10-14 18:50