【问题标题】:Row wise operations in pandas dataframe based on dates (sorting issue)基于日期的 pandas 数据框中的行明智操作(排序问题)
【发布时间】: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


【解决方案1】:

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

df['DATE'] = pd.to_datetime(df['DATE'],infer_datetime_format=True)
df_out = []
for ID in df.GROUP.unique():
    x = df[df.GROUP == ID]
    x.sort_values('DATE',ascending=True, inplace=True)
    x['VALUESHIFT'] = x['VALUE'].shift(+1)
    x['DELTA'] = x['VALUE'].sub(x['VALUESHIFT'])
    df_out.append(x)
df_out = pd.concat(df_out)

1) 将 inplace=True 添加到排序值。

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

3) 通过循环从使用 GROUP 更改为 ID,因为它也是列名的名称,我想这被认为是草率的?

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多