Различия в одном столбце, основанные на различиях в другом, панды - PullRequest
0 голосов
/ 22 мая 2018

Как я могу выполнить следующие манипуляции с pandas?

У меня есть этот фрейм данных:

weight   |  Date                  |  dateDay
43       | 09/03/2018  08:48:48   |  09/03/2018
30       | 10/03/2018  23:28:48   |  10/03/2018
45       | 12/03/2018  04:21:44   |  12/03/2018
25       | 17/03/2018  00:23:32   |  17/03/2018
35       | 18/03/2018  04:49:01   |  18/03/2018
39       | 19/03/2018  20:14:37   |  19/03/2018

Я хочу это:

weight   |  Date                  |  dateDay     |  Fun_Cum
43       | 09/03/2018  08:48:48   |  09/03/2018  |    NULL
30       | 10/03/2018  23:28:48   |  10/03/2018  |    -13
45       | 12/03/2018  04:21:44   |  12/03/2018  |    NULL
25       | 17/03/2018  00:23:32   |  17/03/2018  |    NULL
35       | 18/03/2018  04:49:01   |  18/03/2018  |     10
39       | 19/03/2018  20:14:37   |  19/03/2018  |      4

Псевдокод:

Если День не следует за Днем-1 => Fun_Cum равен NULL;

Остальное (весовой день) - (весовой день-1)

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 мая 2018
#import pandas as pd
#from datetime import datetime
#to_datetime = lambda d: datetime.strptime(d, '%d/%m/%Y')
#df = pd.read_csv('d.csv', converters={'dateDay': to_datetime})

Выше части, только если вы читаете из файла, иначе это просто .shift (), что вам нужно

a = df
b = df.shift()
df["Fun_Cum"] = (a.weight - b.weight) * ((a.dateDay - b.dateDay).dt.days ==1)
0 голосов
/ 22 мая 2018

Это один из способов, используя pd.Series.diff и pd.Series.shift.Вы можете взять разницу между последовательными datetime элементами и атрибутом доступа pd.Series.dt.days.

df['Fun_Cum'] = df['weight'].diff()

df.loc[(df.dateDay - df.dateDay.shift()).dt.days != 1, 'Fun_Cum'] = np.nan

print(df)

   weight       Date    dateDay  Fun_Cum
0      43 2018-03-09 2018-03-09      NaN
1      30 2018-03-10 2018-03-10    -13.0
2      45 2018-03-12 2018-03-12      NaN
3      25 2018-03-17 2018-03-17      NaN
4      35 2018-03-18 2018-03-18     10.0
5      39 2018-03-19 2018-03-19      4.0
...