我在下面的数据框中有一个列
Difference
0
0
0.067
0
0
0
0
0.062
0
0
0
0
0.018
0
0
0
0
-0.085
0
0
0
0
0.033
0
0
0
0
0.034
0
0
0
0
-0.083
0
0
0
0
-0.226
0
0
0
0
0.192
0
0
0
0
0.175
0
0
0
0
0.069
0
0
0
0
-0.066
0
0
值可以是一些连续的负数和一些连续的正数。 我想添加一列,该列具有连续正数和连续负数之和(结果示例中的column =“ Switch”),该列显示值的差异(结果示例中的column =“ Switch Value”)&最后,如果“ Switch”列中的两个值均为正,则另一列中为“ True”((在结果示例中为column =“ Same Switch”)。预期结果如下。
Difference Switch Switch Value Same Switch
0
0
0.067
0
0
0
0
0.062
0
0
0
0
0.018
0
0
0
0
-0.085 0.147
0
0
0
0
0.033 -0.085 0.232 False
0
0
0
0
0.034
0
0
0
0
-0.083 0.067 -0.152 False
0
0
0
0
-0.226
0
0
0
0
0.192 -0.309 0.376 False
0
0
0
0
0.175
0
0
0
0
0.069 0.436 -0.745 False
0
0
0
0
-0.066 0.003 0.433 True
0
0
答案 0 :(得分:1)
使用:
m = df['Difference'].ne(0)
posneg = df['Difference'].where(m).ffill().gt(0)
g = posneg.ne(posneg.shift()).cumsum()
g = g.mask(df['Difference'].eq(0).groupby(g).transform('all')).bfill()
df['Switch'] = np.where(~g.duplicated(), df['Difference'].groupby(g).transform('sum').shift(), np.nan)
df['Switch Value'] = np.where(~g.duplicated(), df['Switch'].ffill().shift().diff(-1), np.nan)
mask = df['Switch Value'].notna()
df['Same Switch'] = df.loc[mask, 'Switch'].eq(df.loc[mask, 'Switch Value'])
print (df.head(30))
Difference Switch Switch Value Same Switch
0 0.000 NaN NaN NaN
1 0.000 NaN NaN NaN
2 0.067 NaN NaN NaN
3 0.000 NaN NaN NaN
4 0.000 NaN NaN NaN
5 0.000 NaN NaN NaN
6 0.000 NaN NaN NaN
7 0.062 NaN NaN NaN
8 0.000 NaN NaN NaN
9 0.000 NaN NaN NaN
10 0.000 NaN NaN NaN
11 0.000 NaN NaN NaN
12 0.018 NaN NaN NaN
13 0.000 NaN NaN NaN
14 0.000 NaN NaN NaN
15 0.000 NaN NaN NaN
16 0.000 NaN NaN NaN
17 -0.085 0.147 NaN NaN
18 0.000 NaN NaN NaN
19 0.000 NaN NaN NaN
20 0.000 NaN NaN NaN
21 0.000 NaN NaN NaN
22 0.033 -0.085 0.232 False
23 0.000 NaN NaN NaN
24 0.000 NaN NaN NaN
25 0.000 NaN NaN NaN
26 0.000 NaN NaN NaN
27 0.034 NaN NaN NaN
28 0.000 NaN NaN NaN
29 0.000 NaN NaN NaN