这个问题分为两部分:
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
对于GROUP中的每个字母,我想找到连续日期之间的值的变化。因此,例如对于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 :(得分:0)
回答我自己的问题。这有效:
filter: url(svg-url#element-id)
1)在排序值中添加了inplace = True。
2)在for循环中添加了排序。
3)循环更改从使用GROUP到ID,因为它也是列名的名称,我想这被认为是马虎?