gpt4 book ai didi

python - Pandas:如何创建一个列,该列指示值何时出现在另一列中预先设定的行数?

转载 作者:行者123 更新时间:2023-12-04 12:44:24 24 4
gpt4 key购买 nike

我试图确定如何创建一个列,该列预先指示(X 行)何时在另一列中下一次出现值时,pandas 本质上执行以下功能(在本例中 X = 3):

df

rowid  event   indicator
1 True 1 # Event occurs
2 False 0
3 False 0
4 False 1 # Starts indicator
5 False 1
6 True 1 # Event occurs
7 False 0

除了对每一行进行迭代/递归循环之外:
i = df.index[df['event']==True]
dfx = [df.index[z-X:z] for z in i]
df['indicator'][dfx]=1
df['indicator'].fillna(0)

然而,这似乎效率低下,是否有更简洁的方法来实现上述示例?谢谢

最佳答案

一个 pandasnumpy解决方案:

# Make a variable shift:
def var_shift(series, X):
return [series] + [series.shift(i) for i in range(-X + 1, 0, 1)]

X = 3
# Set indicator to default to 1
df["indicator"] = 1

# Use pd.Series.where and np.logical_or with the
# var_shift function to get a bool array, setting
# 0 when False
df["indicator"] = df["indicator"].where(
np.logical_or.reduce(var_shift(df["event"], X)),
0,
)

# rowid event indicator
# 0 1 True 1
# 1 2 False 0
# 2 3 False 0
# 3 4 False 1
# 4 5 False 1
# 5 6 True 1
# 6 7 False 0

In [77]: np.logical_or.reduce(var_shift(df["event"], 3))
Out[77]: array([True, False, False, True, True, True, nan], dtype=object)

关于python - Pandas:如何创建一个列,该列指示值何时出现在另一列中预先设定的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com