使用pandas订购数据集

时间:2016-11-04 11:34:33

标签: python python-2.7 csv pandas

我的数据如下所示。

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.

有人知道使用熊猫的优雅方法是什么?

1 个答案:

答案 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