python - 获取上一行的值并计算新列 pandas python

标签 python pandas

有没有办法回顾上一行并计算一个新变量?那么只要上一行是相同的情况,(previous change)-(current change)是什么,并将其归因于新列中的上一个'ChangeEvent'?

这是我的数据框

>>> df
  ChangeEvent StartEvent  case              change      open  
0    Homeless   Homeless     1 2014-03-08 00:00:00 2014-02-08  
1       other   Homeless     1 2014-04-08 00:00:00 2014-02-08     
2    Homeless   Homeless     1 2014-05-08 00:00:00 2014-02-08      
3        Jail   Homeless     1 2014-06-08 00:00:00 2014-02-08     
4        Jail       Jail     2 2014-06-08 00:00:00 2014-02-08   

添加列

Jail  Homeless case
 0    6        1
 0    30       1
 0    0        1

...等等

这里是 df 构建

import pandas as pd
import datetime as DT
d = {'case' : pd.Series([1,1,1,1,2]),
'open' : pd.Series([DT.datetime(2014, 3, 2), DT.datetime(2014, 3, 2),DT.datetime(2014, 3, 2),DT.datetime(2014, 3, 2),DT.datetime(2014, 3, 2)]),
'change' : pd.Series([DT.datetime(2014, 3, 8), DT.datetime(2014, 4, 8),DT.datetime(2014, 5, 8),DT.datetime(2014, 6, 8),DT.datetime(2014, 6, 8)]),
'StartEvent' : pd.Series(['Homeless','Homeless','Homeless','Homeless','Jail']),
'ChangeEvent' : pd.Series(['Homeless','irrelivant','Homeless','Jail','Jail']),
'close' : pd.Series([DT.datetime(2015, 3, 2), DT.datetime(2015, 3, 2),DT.datetime(2015, 3, 2),DT.datetime(2015, 3, 2),DT.datetime(2015, 3, 2)])}
df=pd.DataFrame(d)

最佳答案

获取上一个的方法是使用shift方法:

In [11]: df1.change.shift(1)
Out[11]:
0          NaT
1   2014-03-08
2   2014-04-08
3   2014-05-08
4   2014-06-08
Name: change, dtype: datetime64[ns]

现在您可以减去这些列。 注意:这是 0.13.1(日期时间的东西最近有很多工作,所以 YMMV 使用旧版本)。

In [12]: df1.change.shift(1) - df1.change
Out[12]:
0        NaT
1   -31 days
2   -30 days
3   -31 days
4     0 days
Name: change, dtype: timedelta64[ns]

您可以将其应用于每个案例/组:

In [13]: df.groupby('case')['change'].apply(lambda x: x.shift(1) - x)
Out[13]:
0        NaT
1   -31 days
2   -30 days
3   -31 days
4        NaT
dtype: timedelta64[ns]

关于python - 获取上一行的值并计算新列 pandas python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081878/

相关文章:

python - 如何滚动弹性查询结果,python

python - 明智有效地替换 pandas 数据框中不需要的字符串

python - 使用 Python/Pandas 处理嵌套在 JSON 中的 JSON

python - 使用 apply 方法提高 pandas 性能

python - 我应该如何在不删除行的情况下将值更改为 0

python - 使用 re.split 拆分字符串时的额外空元素

python - 相当于 Python 文件的移动百分比

python - 模块未找到错误: No module named '_socket' after installing python3 to a local folder

python - 如何在 pandas 的列表后创建许多列?

Python:在 pandas 中计数后对日期进行排序