python&删除列值是另一个DataFram中的索引值的行

2024-05-14 22:06:24 发布

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

原始数据帧(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生成了一个新的(df2),其中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中的所有行,其中NoUsager列和NoDemande列中的值与NoUsagerNoDemande索引中的值相同。因此,结果将返回一个新的数据帧df3,其格式与df1相同,但没有line7line9。你知道吗

我试过:

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

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

我怎样才能解决这个问题?你知道吗

任何帮助都将不胜感激!你知道吗


Tags: 原始数据df1sensdf2dimweekdayperiodsdf3
1条回答
网友
1楼 · 发布于 2024-05-14 22:06:24
cols = ['NoDemande','NoUsager']
mask = df1[cols].isin(df2.reset_index()[cols].to_dict('list'))
df1[~mask.all(1)]

enter image description here


有三件事你做得不对。你知道吗

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

  2. df2具有名为['NoDemande','NoUsager']的索引级别。必须重置索引才能将它们转换回列。

  3. 为此使用isin时,请将df2.reset_index()[['NoDemande','NoUsager']]转换为字典。

相关问题 更多 >

    热门问题