【发布时间】:2017-06-27 15:58:21
【问题描述】:
这个问题有两个部分:
1) 有更好的方法吗?
2) 如果 #1 为“否”,我该如何解决我的日期问题?
我有一个如下的数据框
GROUP DATE VALUE DELTA
A 12/20/2015 2.5 ??
A 11/30/2015 25
A 1/31/2016 8.3
B etc etc
B etc etc
C etc etc
C etc etc
- 这是一种表示形式,每个组有近 100 行(每行代表一个唯一的日期)。
对于 GROUP 中的每个字母,我想找出连续日期之间的值变化。因此,例如对于 A 组,我希望在 2015 年 11 月 30 日和 2015 年 12 月 20 日之间进行更改,即 -22.5。目前我正在做以下事情:
df['DATE'] = pd.to_datetime(df['DATE'],infer_datetime_format=True)
df.sort_values('DATE',ascending=True)
df_out = []
for GROUP in df.GROUP.unique():
x = df[df.GROUP == GROUP]
x['VALUESHIFT'] = x['VALUE'].shift(+1)
x['DELTA'] = x['VALUE'].sub(x['VALUESHIFT'])
df_out.append(x)
df_out = pd.concat(df_out)
我遇到的挑战是日期排序不正确。因此,当发生转变并且我计算增量时,它实际上并不是连续日期之间的增量。
这是正确的处理方法吗?如果是这样,我该如何解决我的日期问题?我已经查看/尝试了以下方法无济于事:
Applying datetime format in pandas for sorting
how to make a pandas dataframe column into a datetime object showing just the date to correctly sort
doing calculations in pandas dataframe based on trailing row
Pandas - Split dataframe into multiple dataframes based on dates?
【问题讨论】:
-
要补充一点 - 我没有在数据框上设置索引。它只是在我创建数据框时设置了默认数字 0、1、2、3、4 索引。
标签: python python-2.7 pandas