循环遍历索引和上一项
Posted
技术标签:
【中文标题】循环遍历索引和上一项【英文标题】: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 年龄之间的差异 【参考方案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以上是关于循环遍历索引和上一项的主要内容,如果未能解决你的问题,请参考以下文章