将字符串与前一行和连续行进行比较,以检查是否按字母顺序排列



我需要检查数据帧中的一列是否按字母顺序只比较两个相邻的值。

第1列012345B67

Series.ranknp.diff的一个想法,用Series.ge替换缺失值并进行比较,以获得较大或相等值:

df['InOrder'] = df['Col1'].rank(method='dense').rolling(2).apply(lambda x: np.diff(x)).fillna(0).ge(0)

或者类似@wwnde解决方案:

df['InOrder'] = df['Col1'].rank(method='dense').diff().fillna(0).ge(0)
print (df)
Col1  InOrder
0    A     True
1    A     True
2    B     True
3    C     True
4    B    False
5    D     True
6    D     True
7    E     True

编辑:如果需要匹配,最多可以使用1个值:

df['InOrder'] = df['Col1'].rank(method='dense').diff().shift(-1).fillna(0).isin([0,1])
print (df)
Col1  InOrder
0    A     True
1    A     True
2    B    False
3    A     True
4    A     True
5    B     True
6    B     True
7    C     True

df['InOrder'] = df['Col1'].rank(method='dense').diff(-1).fillna(0).isin([0,-1])
print (df)
Col1  InOrder
0    A     True
1    A     True
2    B    False
3    A     True
4    A     True
5    B     True
6    B     True
7    C     True

使用astype类别将它们转换为数字。找出连续的差异,如果小于0,则设为false。下方的代码

df['InOrder']=df.Col1.astype('category').cat.codes.diff(1).fillna(0).ge(0)


Col1  InOrder
0    A     True
1    A     True
2    B     True
3    C     True
4    B    False
5    D     True
6    D     True
7    E     True

相关内容

最新更新