(python)在数据帧中使用diff()函数
如果当前行中的日期与前一行中的日期不同,如何使用func 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
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
的角度来思考,这确实非常有用,不仅因为它完美地完成了我所需要的,而且还显示了所有的数据操作。