有一个数据帧称为all_combinations
Name Store_Code Town PostC Revenue Street
Starbucks 6890 Derby post1 1 Street_1
Starbucks 6891 Derby 0.5 NaN
Starbucks NaN Derby post6 NaN Street_2
Starbucks 6892 Derby post2 0.9 Street_3
Starbucks 6893 Derby post3 2 Street_4
McDonalds 6890 Derby post1 1 Street_1
McDonalds 8890 Derby post4 2.8 Street_5
McDonalds 8890 London post5 1.7 Street_6
McDonalds NaN London post7 NaN Street_7
McDonalds 8888 London 2 Street_7
还有另一个称为有效的数据框
Name Store_Code Town PostC Revenue Street
Starbucks 6890 Derby post1 1 Street_1
Starbucks 6891 Derby 0.5 NaN
Starbucks 6892 Derby post2 0.9 Street_3
Starbucks 6893 Derby post3 2 Street_4
McDonalds 6890 Derby post1 1 Street_1
McDonalds 8890 Derby post4 2.8 Street_5
McDonalds 8890 London post5 1.7 Street_6
有没有一种优雅的方法可以找到这两个数据框之间的行差(在这种情况下无效),即
Name Store_Code Town PostC Revenue Street
Starbucks NaN Derby post6 NaN Street_2
McDonalds NaN London post7 NaN Street_7
McDonalds 8888 London 2 Street_7
不太优雅,但是我认为这应该可行:concatall_combinations
和valid
,然后删除所有重复项:
In [11]: all_valid = pd.concat([all_combinations, valid])
In [12]: all_valid[~(all_valid.duplicated() | all_valid.duplicated(take_last=True))]
Out[12]:
Name Store Town PostC Revenue Street
2 Starbucks NaN Derby post6 NaN Street_2
8 McDonalds NaN London post7 NaN Street_7
9 McDonalds 8888 London NaN 2 Street_7
两次.duplicated()
是删除重复项的第一次出现和第二次出现。
使用(更优雅)的问题all_combinations[~all_combination.isin(valid).all()]
在于,这还会检查索引标签的相等性(我认为这是不希望的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句