(python)在DataFrame中使用diff()函数

时间:2019-02-04 23:54:05

标签: python pandas

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

例如,我下面的df包含tsvalue,生成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函数以更花哨的方式解决它。

1 个答案:

答案 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)