python将距离计算为列中的一个数字
我有一个数据帧df,其中有一个整数列“X”python将距离计算为列中的一个数字,python,pandas,Python,Pandas,我有一个数据帧df,其中有一个整数列“X” df = pd.DataFrame({'X': [7, 2, 0, 3, 4, 2, 5, 0, 3, 4]}) 我需要为df中的每个值计算到前一个零的距离 因此,预期的产出将是 op = pd.DataFrame({'dist': [0 ,0, 0, 1, 2, 3, 4, 0, 1, 2]}) 我能够执行for循环并实现逻辑,但我想还有一种更为类似python的方法,但我缺少这种方法。使用: g = df['X'].eq(0).cumsum()
df = pd.DataFrame({'X': [7, 2, 0, 3, 4, 2, 5, 0, 3, 4]})
我需要为df中的每个值计算到前一个零的距离
因此,预期的产出将是
op = pd.DataFrame({'dist': [0 ,0, 0, 1, 2, 3, 4, 0, 1, 2]})
我能够执行for循环并实现逻辑,但我想还有一种更为类似python的方法,但我缺少这种方法。使用:
g = df['X'].eq(0).cumsum()
df['dist'] = np.where(g.eq(0), 0, df.groupby(g).cumcount())
print (df)
X dist
0 7 0
1 2 0
2 0 0
3 3 1
4 4 2
5 2 3
6 5 4
7 0 0
8 3 1
9 4 2
说明:
0
和(=
)0
0之前测试第一组g
print (df.assign(mask = df['X'].eq(0),
g = df['X'].eq(0).cumsum(),
counter = df.groupby(g).cumcount(),
mask1 = g.eq(0),
dist = np.where(g.eq(0), 0, df.groupby(g).cumcount())))
X mask g counter mask1 dist
0 7 False 0 0 True 0
1 2 False 0 1 True 0
2 0 True 1 0 False 0
3 3 False 1 1 False 1
4 4 False 1 2 False 2
5 2 False 1 3 False 3
6 5 False 1 4 False 4
7 0 True 2 0 False 0
8 3 False 2 1 False 1
9 4 False 2 2 False 2