Измените количество значений в столбце на np.nan в зависимости от значения в другом столбце. - PullRequest
0 голосов
/ 10 января 2019

Как и в заголовках, я хочу изменить значения в 'Vorgabe' и 'Temp' на nan, основываясь на значении в 'Cut'.

Это пример с желаемым результатом. Я думаю, что это лучший способ понять мою проблему.

     OptOpTemp  OpTemp  Grad  Vorgabe  Temp  Cut
0        22.5      24   0.0     22.5    24   0.0
1        22.5      24   0.0     22.5    24   0.0
2        23.5      24   1.0     23.5    24   1.0
3        23.5      24   0.0     23.5    24   0.0
4        23.5      24   0.0     23.5    24   0.0
5        23.5      24   0.0     23.5    24   0.0
6        23.5      24   0.0     23.5    24   0.0
7        23.5      24   0.0     23.5    24   0.0
8        23.5      24   0.0     23.5    24   0.0
9        26.0      24   2.5     26.0    24   3.0
10       26.0      24   0.0     26.0    24   0.0
11       26.0      24   0.0     26.0    24   0.0
12       26.0      24   0.0     26.0    24   0.0
13       26.0      24   0.0     26.0    24   0.0

Я хочу изменить это на:

     OptOpTemp  OpTemp  Grad  Vorgabe  Temp  Cut
0        22.5      24   0.0     22.5    24   0.0
1        22.5      24   0.0     nan    nan   0.0 <- one row above
2        23.5      24   1.0     nan    nan   1.0
3        23.5      24   0.0     nan    nan   0.0 <- one row among
4        23.5      24   0.0     23.5    24   0.0
5        23.5      24   0.0     23.5    24   0.0
6        23.5      24   0.0     nan    nan   0.0 <- three rows above
7        23.5      24   0.0     nan    nan   0.0
8        23.5      24   0.0     nan    nan   0.0
9        26.0      24   2.5     nan    nan   3.0
10       26.0      24   0.0     nan    nan   0.0
11       26.0      24   0.0     nan    nan   0.0
12       26.0      24   0.0     nan    nan   0.0 <- three rows among
13       26.0      24   0.0     26.0    24   0.0

Количество строк выше и среди основано на значении в 'Cut'.

Я хочу создать это для каждого целочисленного значения в 'Cut'. Таким образом, если есть 2, он должен сократить два ряда выше и два среди. Поэтому я думаю, что потребуется цикл, но я не знаю, как добиться правильного результата ...

1 Ответ

0 голосов
/ 10 января 2019

Одним из способов является создание массива индексов и маски по ним:

# define in-scope cuts
cuts = df.loc[df['Cut'] != 0, 'Cut'].astype(int)

# calculate array of indices
idx = np.hstack([np.arange(i - val, i + val + 1) for i, val in cuts.items()])

# mask series according to indices
df.loc[idx, ['Vorgabe', 'Temp']] = np.nan

# alternative: use if index ranges may fall out of dataframe index
# df.loc[df.index.isin(idx), ['Vorgabe', 'Temp']] = np.nan

print(df)

#     OptOpTemp  OpTemp  Grad  Vorgabe  Temp  Cut
# 0        22.5      24   0.0     22.5  24.0  0.0
# 1        22.5      24   0.0      NaN   NaN  0.0
# 2        23.5      24   1.0      NaN   NaN  1.0
# 3        23.5      24   0.0      NaN   NaN  0.0
# 4        23.5      24   0.0     23.5  24.0  0.0
# 5        23.5      24   0.0     23.5  24.0  0.0
# 6        23.5      24   0.0      NaN   NaN  0.0
# 7        23.5      24   0.0      NaN   NaN  0.0
# 8        23.5      24   0.0      NaN   NaN  0.0
# 9        26.0      24   2.5      NaN   NaN  3.0
# 10       26.0      24   0.0      NaN   NaN  0.0
# 11       26.0      24   0.0      NaN   NaN  0.0
# 12       26.0      24   0.0      NaN   NaN  0.0
# 13       26.0      24   0.0     26.0  24.0  0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...