Я встречал много похожих вопросов, но ни один из них не решает мою проблему.
У меня очень большой набор данных, в котором я хочу найти разницу только для нескольких выбранных строк из предыдущей строки. В следующем примере я хотел бы получить diff () для pVal на основе значения в cal c, как показано:
pVal calc pDiff
1 .17 False NaN
2 .31 False NaN
3 .46 False NaN
4 .39 True -.07
5 .26 False NaN
6 .6 True .34
Примечание: pDiff получает NaN по умолчанию
Можно просто вычислить разницу для всех строк, а затем заменить pDiff на NaN на False в «cal c». Но, как указывалось ранее, у меня очень большой набор данных с очень небольшим количеством «True» значений в столбце cal c, поэтому много накладных расходов.
Я пробовал следующее:
df['pDiff'] = df[df['calc']==True]['pVal'].diff()
Но он дает неверные результаты, вычисляя разницу между строками с помощью calc == True. В нашем примере разница для строки 6 вычисляется между строками 6 и 4 (0,6–0,39 = 0,21) вместо ожидаемых 0,34 между строками 6 и 5. Разница для строки 4 остается NaN, которая является первой строкой с calc == True.
У меня есть возможность перебирать все строки, но для меня это слишком медленно.
Мне нужно решение, которое вычисляет и изменяет значения только для тех строк, где cal c содержит True .