如果当前行中的日期与上一行中的日期不同,如何使用func diff()将结果重置为零?
例如,我下面的df
包含ts
和value
,生成value_diff
时可以使用:
df['value_diff'] = df.value.diff()
但是在这种情况下,索引4的行将具有value_diff = 200
,由于日期已更改,我需要将其重置为零。
i ts value value_diff
0 2019-01-02 11:48:01.001 100 0
1 2019-01-02 14:26:01.001 150 50
2 2019-01-02 16:12:01.001 75 -75
3 2019-01-02 18:54:01.001 50 -25
4 2019-01-03 09:12:01.001 250 0
5 2019-01-03 12:25:01.001 310 60
6 2019-01-03 16:50:01.001 45 -265
7 2019-01-03 17:10:01.001 30 -15
我知道我可以为此建立一个循环,但是我想知道是否可以使用lambda函数以更花哨的方式解决它。
答案 0 :(得分:1)
您要使用groupby
,然后使用fillna
来获取0个值。
import pandas as pd
# Reading your example and getting back to correct format from clipboard
df = pd.read_clipboard()
df['ts'] = df['i'] + ' ' + df['ts']
df.drop(['i', 'value_diff'], axis=1, inplace=True) # The columns get misaligned from reading clipboard
# Now we have your original
print(df.head())
# Convert ts to datetime
df['ts'] = pd.to_datetime(df['ts'], infer_datetime_format=True)
# Add a date column for us to groupby
df['date'] = df['ts'].dt.date
# Apply diff and fillna
df['value_diff'] = df.groupby('date')['value'].diff().fillna(0)