原始数据框架(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, 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
中的所有行,其中列NoUsager
和NoDemande
中的值与索引NoUsager
和NoDemande
中的值相同在df2
。因此,结果将返回具有相同df3
格式但没有df1
和line7
的新DataFrame line9
。
我试过了:
df3 = df1.loc[~df1['NoDemande','NoUsager'].isin([df2.NoDemande,df2.NoUsager])]
但它返回了:KeyError: ('NoDemande', 'NoUsager')
我该如何解决这个问题?
任何帮助将不胜感激!
答案 0 :(得分:2)
cols = ['NoDemande','NoUsager']
mask = df1[cols].isin(df2.reset_index()[cols].to_dict('list'))
df1[~mask.all(1)]
你做错了三件事。
df1['NoDemande','NoUsager']
需要df1[['NoDemande','NoUsager']]
df2
的索引级别名称为['NoDemande','NoUsager']
。您必须重置索引才能将它们重新转换为列。
为此目的使用isin
时,请将df2.reset_index()[['NoDemande','NoUsager']]
转换为字典。