假设我有一个日期df:
date quantity
2015-01-01 100
2016-01-01 500
2016-01-05 100
,我想添加另一列有关当前行日期和下一行日期之间的时间的列。如果是最后一行,请参考今天的日期。
date quantity days
2015-01-01 100 365
2016-01-01 500 4
2016-01-05 100 1227
请注意:1227是从2016-01-05到2019-05-16(今天)的天数。 我可以使用循环来做,只是想知道我是否可以利用熊猫来干净地做它。
答案 0 :(得分:2)
如果我们将其压入一行
df['New']=df.date.append(pd.Series(pd.datetime.now())).diff().dropna().dt.days.values
df
Out[102]:
date quantity New
0 2015-01-01 100 365
1 2016-01-01 500 4
2 2016-01-05 100 1226
答案 1 :(得分:0)
您可以在结果上移动并使用dt访问器:
In [11]: df.date - df.date.shift()
Out[11]:
0 NaT
1 365 days
2 4 days
Name: date, dtype: timedelta64[ns]
In [12]: (df.date - df.date.shift()).dt.days
Out[12]:
0 NaN
1 365.0
2 4.0
Name: date, dtype: float64
In [13]: (df.date - df.date.shift()).dt.days.fillna(0)
Out[13]:
0 0.0
1 365.0
2 4.0
Name: date, dtype: float64
向上移动以获得所需的相同结果:
In [14]: (df.date.shift(-1) - df.date).dt.days.fillna(0)
Out[14]:
0 365.0
1 4.0
2 0.0
Name: date, dtype: float64
如前所述,您可以使用diff做这个清洁器:
In [21]: -df.date.diff(-1).fillna(0)
Out[21]:
0 365 days
1 4 days
2 0 days
Name: date, dtype: timedelta64[ns]
In [22]: -df.date.diff(-1).fillna(0).dt.days
Out[22]:
0 365
1 4
2 0
Name: date, dtype: int64
答案 2 :(得分:0)
查找差异和内容,
df.loc[:, 'diff'] = np.abs(df.date-df.date.shift(-1)).dt.days
df['diff'] = df['diff'].fillna(np.abs(df.date-pd.Timestamp.now()).dt.days)
date quantity diff
0 2015-01-01 100 365.0
1 2016-01-01 500 4.0
2 2016-01-05 100 1226.0