【问题标题】:Pandas data frame: adding columns based on previous time periods熊猫数据框:根据以前的时间段添加列
【发布时间】:2013-09-15 19:44:16
【问题描述】:

我正在尝试解决 pandas 中的一个问题,更习惯于 R。

我有一个包含三列的数据框 df:人、期间、值

df.head() 或前几行看起来像:

  | person | period | value
0 | P22    | 1      | 0
1 | P23    | 1      | 0
2 | P24    | 1      | 1
3 | P25    | 1      | 0
4 | P26    | 1      | 1
5 | P22    | 2      | 1

请注意,最后一行记录了人 P22 的周期 2 的值。

我现在想添加一个新列,该列提供上一期间的值。因此,如果 P22 周期 1 中的值为 0,那么这个新列将如下所示:

  | person | period | value  | lastperiod
5 | P22    | 2      | 1      | 0

我相信我需要执行以下命令,加载熊猫:

for p in df.period.unique():
    df['lastperiod']== [???]

这应该如何表述?

【问题讨论】:

    标签: python numpy pandas time-series


    【解决方案1】:

    您可以按人分组,然后对值进行转换:

    In [11]: g = df.groupby('person')
    
    In [12]: g['value'].apply(lambda s: s.shift())
    Out[12]: 
    1   NaN
    2   NaN
    3   NaN
    4   NaN
    5   NaN
    6     0
    dtype: float64
    

    将此添加为列:

    In [13]: df['lastPeriod'] = g['value'].apply(lambda s: s.shift())
    
    In [14]: df
    Out[14]: 
      person  period  value  lastPeriod
    1    P22       1      0         NaN
    2    P23       1      0         NaN
    3    P24       1      1         NaN
    4    P25       1      0         NaN
    5    P26       1      1         NaN
    6    P22       2      1           0
    

    这里的 NaN 表示缺失数据(即上一时期没有条目)。

    【讨论】:

    • 谢谢。我将如何回到 2 个时期?
    • shift() 是 shift(1) 的简写,要返回两个时期使用 shift(2) :)
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 2021-06-25
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多