原始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
与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')
我怎么解决这个问题?
任何帮助将不胜感激!
最佳答案
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']]
转换为字典。关于python - python&pandas-删除行,其中列值是另一个DataFrame中的索引值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39391816/