Python计算列中到数字的距离

2024-04-26 14:14:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧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的方式来做,这是我所缺少的。你知道吗


Tags: 数据距离dataframedffordist方式整数
1条回答
网友
1楼 · 发布于 2024-04-26 14:14:01

用途:

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

解释:

  1. 首先比较0^{}==
  2. ^{}加累计和
  3. ^{}按组创建计数器
  4. 在第一个0之前测试第一组g
  5. 通过^{}创建新列
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

相关问题 更多 >