我有这样的df:
1 2 3 4 5 6
0 5 10 12 35 70 80
1 10 11 23 40 42 47
2 5 26 27 38 60 65
每行中的所有值都不同且具有递增顺序的地方。
如果至少有两个连续数字,我想用1
或0
创建一个新列。
例如,第二和第三行具有10
和11
,以及26
和27
。是否有比使用迭代器更Python化的方式?
谢谢
答案 0 :(得分:8)
使用DataFrame.diff
作为每行的差异,与1
进行比较,检查每行是否至少有一个True
,并最后转换为整数:
df['check'] = df.diff(axis=1).eq(1).any(axis=1).astype(int)
print (df)
1 2 3 4 5 6 check
0 5 10 12 35 70 80 0
1 10 11 23 40 42 47 1
2 5 26 27 38 60 65 1
要提高性能,请使用numpy
:
arr = df.values
df['check'] = np.any(((arr[:, 1:] - arr[:, :-1]) == 1), axis=1).astype(int)