根据列的条件在数据帧间隔中填充 NaN 值

时间:2021-02-05 07:57:03

标签: python arrays pandas dataframe numpy

我有一个数据框,它有一个 ID 列和描述列,其中包含由 ID 表示的 START 和 STOP 值。每个 START-STOP 对都由一个 ID 表示,并且在该对下次出现时增加到 1。

Initial Dataframe

我需要在 STOP 元素发生后立即将 ID 增加 1(当然更新 NaN​​),并且这个相同的 ID 应该继续,直到我找到下一个 STOP。 另外如何处理第一个 START-STOP 对,因为主要问题集中在覆盖 STOP-STOP 事件上? 此外,START-STOP 或 STOP-STOP 对中可以存在任意数量的事件或段

我想要这样的结局

output dataframe

这种需要应用于数十万行而不是一堆显示为示例的行。请帮我解决这个问题!提前致谢:)

1 个答案:

答案 0 :(得分:2)

# create a group-tag by every STOP
cond = df.SEG_DESC == 'STOP'
df['tag'] = cond.cumsum()
df.loc[cond, 'tag'] = df.loc[cond, 'tag'] - 1

# for every tag-group use back fillna
df['ID_START_STOP'] = df.groupby('tag')['ID_START_STOP'].bfill().astype(int)