基于日期的pandas数据帧中的行式操作(排序问题)

时间:2017-02-09 15:05:44

标签: python python-2.7 pandas

这个问题分为两部分:

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中的每个字母,我想找到连续日期之间的值的变化。因此,例如对于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?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。这有效:

filter: url(svg-url#element-id)

1)在排序值中添加了inplace = True。

2)在for循环中添加了排序。

3)循环更改从使用GROUP到ID,因为它也是列名的名称,我想这被认为是马虎?