(python)在数据帧中使用diff()函数

(python)在数据帧中使用diff()函数,python,pandas,Python,Pandas,如果当前行中的日期与前一行中的日期不同,如何使用func diff()将结果重置为零 例如,我在下面的df中包含ts和value,当生成value\u diff时,我可以使用: df['value_diff'] = df.value.diff() 但在这种情况下,索引4的行将具有值\u diff=200,我需要将其重置为零,因为日期已更改 i ts value value_diff 0 2019-01-02 11:48:01.001 100

如果当前行中的日期与前一行中的日期不同,如何使用func diff()将结果重置为零

例如,我在下面的
df
中包含
ts
value
,当生成
value\u diff
时,我可以使用:

df['value_diff'] = df.value.diff()
但在这种情况下,索引4的行将具有
值\u 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函数。

您想使用
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)

旁注:“也许使用lambda函数”在pandas中并不被认为是“更有趣的”,因为这仍然会涉及一个缓慢的隐式循环。您想从
groupby
的角度来思考,这确实非常有用,不仅因为它完美地完成了我所需要的,而且还显示了所有的数据操作。