【问题标题】:looping through an index and the previous item循环遍历索引和上一项
【发布时间】:2017-09-10 01:58:27
【问题描述】:

我想遍历日期列表,以获得日期和之前日期之间的差异(例如 4/13 和 3/13 之间的差异)。

我正在寻找一个能够扫描几个日期的 for 循环

import pandas as pd
import numpy as np
raw_data = {'date' : pd.to_datetime(pd.Series(['2017-03-30','2017-03-31','2017-04-03','2017-04-04'])),
'age': [10,np.nan,50,30]}
df1 = pd.DataFrame(raw_data, columns = ['date','age'])

df1

输入数据

df2=df1.T


df2['new']=df2.iloc[:,3]-df2.iloc[:,2]

想要的结果:

raw_data = {'date' : pd.to_datetime(pd.Series(['2017-03-30','2017-03-31','2017-04-03','2017-04-04'])),'age': [10,np.nan,50,30],
'diff': [10,-10,50,-20]}
output = pd.DataFrame(raw_data, columns = ['date','age','diff'])

output

【问题讨论】:

  • 我很困惑!
  • 如果您将代码运行到 df2,您会看到“新”是 2017-04-04 和 2017-04-03 之间的年龄差异。我想做一个向后循环以回到以前的日期,在夫妻中,例如还通过循环比较 2017-03-31 和 2017-03-30
  • 我真的很难理解你的问题。你能给出一个清晰的例子来说明你的输入、你的逻辑和你想要的输出吗?
  • 我编辑了文本,放置了输入和所需的输出数据框。在输出中,“2017-04-04”行的 diff 值为 -20,即 2017-04-04 年龄与 2017-04-03 年龄之间的差异

标签: python loops date pandas


【解决方案1】:

如果您想知道日期之间的差异,则不需要循环。 也许你应该这样做:

df1['difference'] = (df1['date'] - df1['date'].shift(1)).apply(lambda x: pd.NaT if x is pd.NaT else x.days)

或者这个:

df1['difference'] = (df1['date'] - df1['date'].shift(-1)).apply(lambda x: pd.NaT if x is pd.NaT else x.days)

【讨论】:

  • 不是日期之间的差异,而是年龄之间的差异,请看想要的结果,df3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2015-12-18
  • 1970-01-01
  • 2022-06-30
  • 2012-07-03
  • 2011-10-07
  • 2021-12-14
相关资源
最近更新 更多