循环遍历索引和上一项

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

以上是关于循环遍历索引和上一项的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应原生渲染中以无限循环返回数组项视图?

打字稿循环遍历具有索引和值的字符串

*使用while循环遍历数组创建索引和自增索引值

PHP脚本循环遍历目录中的所有文件?

Ansible 嵌套循环 - 如何遍历循环项?

python运算学习之Numpy ------ 数组的切片索引与循环遍历条件和布尔数组