[英]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, Periods
( 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
。 因此,结果将返回具有相同df1
格式但没有line7
和line9
的新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)]
您做错了三件事。
df1['NoDemande','NoUsager']
需要为df1[['NoDemande','NoUsager']]
df2
具有名称为['NoDemande','NoUsager']
索引级别。 您必须重置索引才能将它们重新变成列。
当使用isin
用于此目的,变换df2.reset_index()[['NoDemande','NoUsager']]
到字典。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.