我有以下代码,每当 notch_sp 从 11 或更高到 10 或更低时,它都会生成一个 1,但我只希望它在每个 gvkey 第一次发生时生成 1。
df['cliff']= (df['gvkey'].eq(df['gvkey'].shift()) &
df['notch_sp'].shift().gt(10) &
df['notch_sp'].lt(11)).view('i1')
对于如下所示的数据集:
df[['gvkey','notch_sp','am','cliff']]
Out[1]:
gvkey notch_sp am cliff
1 1004.0 12.0 0.490 0
2 1004.0 10.0 0.490 1
3 1004.0 11.0 0.608 0
4 1004.0 10.0 0.608 1
5 329498.0 12.0 NaN 0
6 329498.0 10.0 NaN 1
7 329498.0 13.0 NaN 0
8 329498.0 10.0 NaN 1
因此,悬崖在第 2 行和第 6 行需要为 1,而在其他地方需要为 0。 抱歉,我没有任何关于这样做的想法,但我只是不知道如何做。
最佳答案
使用GroupBy.cumsum
对于第一组,通过 1
进行比较,并通过 &
进行按位 AND
的原始链接:
df['cliff']= (df['gvkey'].eq(df['gvkey'].shift()) &
df['notch_sp'].shift().gt(10) &
df['notch_sp'].lt(11))
df['cliff'] = (df.groupby('gvkey')['cliff'].cumsum().eq(1) & df['cliff']).view('i1')
print (df)
gvkey notch_sp am cliff
1 1004.0 12.0 0.490 0
2 1004.0 10.0 0.490 1
3 1004.0 11.0 0.608 0
4 1004.0 10.0 0.608 0
5 329498.0 12.0 NaN 0
6 329498.0 10.0 NaN 1
7 329498.0 13.0 NaN 0
8 329498.0 10.0 NaN 0
关于python - 在 python 中,如何限制每个 gvkey 插入虚拟一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62652761/