【问题标题】:How to create a separate tracking column based on dates?如何根据日期创建单独的跟踪列?
【发布时间】:2013-01-19 12:30:16
【问题描述】:

我有一个数据框,df:

df:
            val
date
2012-01-01  4.2      
2012-01-02  3.7
2012-01-03  6.2
2012-01-04  1.2
2012-01-05  2.4
2012-01-06  2.3

我要创建的是一个从 0 开始的指定日期的列,并相应地填写该列(假设本例中的日期是 2012-01-04):

df2:
            val  tracking
date
2012-01-01  4.2  -3
2012-01-02  3.7  -2
2012-01-03  6.2  -1
2012-01-04  1.2  0
2012-01-05  2.4  1
2012-01-06  2.3  2

我尝试使用 np.arange() 但无法集中在我需要的行上。日期列设置为索引 (pandas df)。

谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为最简单的方法是分两部分进行:

    df['tracking'] = pd.np.arange(len(df))
    
    In [12]: df
    Out[12]: 
                val  tracking
    date                     
    2012-01-01  4.2         0
    2012-01-02  3.7         1
    2012-01-03  6.2         2
    2012-01-04  1.2         3
    2012-01-05  2.4         4
    2012-01-06  2.3         5
    
    df['tracking'] -= df.ix['2012-01-04']['tracking']
    
    In [14]: df
    Out[14]: 
                val  tracking
    date                     
    2012-01-01  4.2        -3
    2012-01-02  3.7        -2
    2012-01-03  6.2        -1
    2012-01-04  1.2         0
    2012-01-05  2.4         1
    2012-01-06  2.3         2
    

    【讨论】:

    • 安迪,感谢您的帮助。 df 目前实际上是一个系列。当我执行 df['tracking'] = pd.np.arange(len(df)) 我得到“不在这个系列中跟踪!”我应该如何处理?谢谢。
    • 您可以简单地将其设为 DataFrame:df = pd.DataFrame(df) :) 注意:最好只调用 DataFrames df!
    • 同意。这真的很有帮助。谢谢。
    • 作为一个实践问题,我应该在进行连接和合并时将 Series 转换为一列 DF 吗?还是真的是个案?
    • @user1911092 我不确定我是否理解这个问题,你不能只使用 DataFrames 进行连接吗?也许这应该是另一个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-02-03
    • 2022-11-12
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多