Нахождение разницы в значении и дате между строками в кадре данных pandas по условному столбцу - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь найти способ вычисления разницы в значениях определенного столбца, а также разницы в датах на основе значений третьего столбца, который имеет значения 0 и 1.

Мой начальный фрейм данных выглядит так:

enter image description here

df = pd.DataFrame({'value':[-15, -10, 40, -25, -50,-90, 200], 
                   'date': ['2018-01-20', '2018-01-19','2018-01-19',
                            '2018-01-18', '2018-01-17','2018-01-16', 
                            '2018-01-15'],
                   'flag':[0,0,1,0,0,0,1]})

Столбец флага принимает значение 1, если значение столбца больше нуля, и 0 в противном случае. Предположим, это отсортировано по дате. Учитывая этот кадр данных, я хочу вычислить изменение значения и даты для каждой строки, где флаг равен 0 относительно ближайшей, более ранней даты, флаг равен 1.

Полученный df должен выглядеть так:

enter image description here

Здесь мы впервые получили положительное значение, равное 40. Разница между 40 и -10 равна 30, а совокупная разница между этим значением и -15 равна 15.

1 Ответ

0 голосов
/ 29 августа 2018

Это не отличается (diff), это sum для значения

df=df.sort_values(['date','flag'],ascending=[True,False])#sort your df 
df['diff_value']=df.groupby(df.flag.cumsum()).value.cumsum()#get the cumsum with flag key 
df['diff_days']=df.groupby(df.flag.cumsum()).date.apply(lambda x : x.diff().dt.days.fillna(0).cumsum())#get the days different . 
df=df.sort_index()
df
Out[436]: 
        date  flag  value  diff_value  diff_days
0 2018-01-20     0    -15          15        1.0
1 2018-01-19     0    -10          30        0.0
2 2018-01-19     1     40          40        0.0
3 2018-01-18     0    -25          35        3.0
4 2018-01-17     0    -50          60        2.0
5 2018-01-16     0    -90         110        1.0
6 2018-01-15     1    200         200        0.0
...