Проверка истинности значения нескольких столбцов - PullRequest
0 голосов
/ 18 мая 2019

Код ниже создает результат в первой таблице. Однако я не могу заставить его оценить значение истинности в столбце pos2 перед выполнением требуемого вычисления для столбца d. Важно, чтобы все сгруппированные значения (идентифицируемые одним и тем же номером в столбце grp2) имели значение True, а также в столбце pos2 перед выполнением расчета.

threshold = 90
df['pos2'] = abs(df.deviation) >= 0.05
df['grp2'] = (df['pos2'] != df['pos2'].shift()).cumsum()
s=df.grp2.diff().ne(0).cumsum()
s1=s.groupby(s).transform('count')
s2=s.groupby(s).cumcount()
df['select2']=((s1==s2+1)&(s1>threshold)).astype(int)
df['d']=(df.select2.mask(df.select2==0)*1).ffill(limit=3).combine_first(df.select2)

из которых выход:

            af      a  deviation   pos2  grp2  select2              d
0       50.033    NaN     -0.033  False     1        0            0.0
1       50.025 -0.008     -0.025  False     1        0            0.0
2       49.979 -0.046      0.021  False     1        0            0.0
3       49.954 -0.025      0.046  False     1        1            1.0
4       49.935 -0.019      0.065   True     2        0            1.0
5       49.935  0.000      0.065   True     2        0            1.0
6       49.930 -0.005      0.070   True     2        0            1.0
268173  50.058 -0.005     -0.058   True  2840        0            0.0
268174  50.052 -0.006     -0.052   True  2840        0            0.0
268175  50.053  0.001     -0.053   True  2840        0            0.0
268176  50.056  0.003     -0.056   True  2840        1            1.0
268177  50.050 -0.006     -0.050  False  2841        0            1.0
268178  50.050  0.000     -0.050  False  2841        0            1.0
268179  50.057  0.007     -0.057   True  2842        0            1.0

И я бы хотел, чтобы это было

            af      a  deviation   pos2  grp2  select2              d
0       50.033    NaN     -0.033  False     1        0            0.0
1       50.025 -0.008     -0.025  False     1        0            0.0
2       49.979 -0.046      0.021  False     1        0            0.0
3       49.954 -0.025      0.046  False     1        1            0.0
4       49.935 -0.019      0.065   True     2        0            0.0
5       49.935  0.000      0.065   True     2        0            0.0
6       49.930 -0.005      0.070   True     2        0            0.0
268173  50.058 -0.005     -0.058   True  2840        0            0.0
268174  50.052 -0.006     -0.052   True  2840        0            0.0
268175  50.053  0.001     -0.053   True  2840        0            0.0
268176  50.056  0.003     -0.056   True  2840        1            1.0
268177  50.050 -0.006     -0.050  False  2841        0            1.0
268178  50.050  0.000     -0.050  False  2841        0            1.0
268179  50.057  0.007     -0.057   True  2842        0            1.0

Было проще, чем ожидалось, просто изменить эту строку на:

df['select2']=((s1==s2+1)&(s1>threshold)&(df['pos2'] == True)).astype(int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...