我的数据如下所示。
Name,colA,colB
A,1,100
B,2,102
C,2,101
D,2,103
E,3,99
我想首先按照colA订购列,然后按colB订购。
如果colA中的数字相同,那么订单将由colB决定。
但是如果colB的顺序与colA不一致,则需要删除该行。
我将看到的结果是......
Name,colA,colB
A,1,100
C,2,101
B,2,102
D,2,103
## E row is removed, as the order of colA and colB cannot consistent.
有人知道使用熊猫的优雅方法是什么?
答案 0 :(得分:1)
我认为您可以使用sort_values
,然后按diff
获取差异,并移除boolean indexing
之间差异不是1
的所有行:
sorted_df = df.sort_values(['colA', 'colB'])
print (sorted_df)
Name colA colB
0 A 1 100
2 C 2 101
1 B 2 102
3 D 2 103
4 E 3 99
m = sorted_df['colB'].diff().fillna(1)
print (m)
0 1.0
2 1.0
1 1.0
3 1.0
4 -4.0
Name: colB, dtype: float64
mask = m != 1
print (mask)
0 False
2 False
1 False
3 False
4 True
Name: colB, dtype: bool
print (sorted_df[~mask])
Name colA colB
0 A 1 100
2 C 2 101
1 B 2 102
3 D 2 103
所有在一起:
sorted_df = df.sort_values(['colA', 'colB'])
print (sorted_df[~(sorted_df['colB'].diff().fillna(1) != 1)])
Name colA colB
0 A 1 100
2 C 2 101
1 B 2 102
3 D 2 103