【问题标题】:Percent change in a specific time period using Python使用 Python 在特定时间段内的百分比变化
【发布时间】:2021-01-31 03:25:42
【问题描述】:

我有一个带有日期时间索引的数据框。首先,这是我的假数据。

import pandas as pd

data1 = {'date' : ['20190219 093100', '20190219 103200','20190219 171200','20190219 193900','20190219 194500','20190220 093500','20190220 093600'],
     'number' : [18.6125, 12.85, 14.89, 15.8301, 15.85, 14.916 , 14.95]}

df1 = pd.DataFrame(data1)
df1 = df1.set_index('date')
df1.index = pd.to_datetime(df1.index).strftime('%Y-%m-%d %H:%M:%S')

我想要做的是创建一个名为“New_column”的新列,其中包含“是”或“否”的分类变量取决于“数字”列中的值是否在同一天增加了至少 20% .

所以在这个假数据中,只有第二个值“12.85”会是“是”,因为它在时间戳“2019-02-19 19:45:00”处增加了 23.35%

即使第一个值比第三个值大 25%,因为它发生在未来,所以不应该计算在内。

在这个过程之后,我应该在每天最后一行的“New_column”中有 NaN。

我一直在尝试许多不同的方法来做到这一点:

  • pandas.DataFrame.pct_change
  • pandas.DataFrame.diff

我怎样才能以 Python 的方式做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    初始设置

    data = {
        'datetime' : ['20190219 093100', '20190219 103200','20190219 171200','20190219 193900','20190219 194500','20190220 093500','20190220 093600'],
        'number' : [18.6125, 12.85, 14.89, 15.8301, 15.85, 14.916 , 14.95]
    }
    df = pd.DataFrame(data)
    df['datetime'] = df['datetime'].astype('datetime64')
    df = df.sort_values('datetime')
    df['date'] = df['datetime'].dt.date
    df['New_column'] = 'No'
    

    查找在同一天晚些时候出现 20% 增长的所有行

    indeces_true = set([])
    for idx_low, row_low in df.iterrows():
        for idx_high, row_high in df.iterrows():
            if (row_low['date'] == row_high['date'] and
                row_low['datetime'] < row_high['datetime'] and
                row_low['number'] * 1.2 < row_high['number']):
                indeces_true.add(idx_low)   
    
    # Assign 'Yes' for the true rows
    for i in indeces_true:
        df.loc[i, 'New_column'] = 'Yes'
    
    # Last timestamp every day assigned as NaN
    df.loc[df['date'] != df['date'].shift(-1), 'New_column'] = np.nan
    
    # Optionally convert to categorical variable
    df['New_column'] = pd.Categorical(df['New_column'])
    

    输出

    >>> df
    
        datetime                number         date     New_column
    0   2019-02-19 09:31:00     18.6125     2019-02-19  No
    1   2019-02-19 10:32:00     12.8500     2019-02-19  Yes
    2   2019-02-19 17:12:00     14.8900     2019-02-19  No
    3   2019-02-19 19:39:00     15.8301     2019-02-19  No
    4   2019-02-19 19:45:00     15.8500     2019-02-19  NaN
    5   2019-02-20 09:35:00     14.9160     2019-02-20  No
    6   2019-02-20 09:36:00     14.9500     2019-02-20  NaN
    

    【讨论】:

      猜你喜欢
      • 2021-02-04
      • 1970-01-01
      • 2019-09-17
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      相关资源
      最近更新 更多