DateOffset Pandas 减法
Posted
技术标签:
【中文标题】DateOffset Pandas 减法【英文标题】:DateOffset Panda substraction 【发布时间】:2017-09-21 08:33:48 【问题描述】:我有一个数据框
[in] MyDates
[out]
2017-04-04 -5.0
2017-04-03 -5.0
2017-03-31 -4.0
2017-03-30 -6.0
2017-03-29 -5.0
2017-03-28 -5.0
每个数字对应于我应该从相应日期添加或删除多少天。我想用索引日期减去第一列中的天数创建一个新列。我知道我可以用 DateOffset 做到这一点,但我不知道如何......
谢谢!
【问题讨论】:
这是系列还是 df? 【参考方案1】:您可以将列转换为TimedeltaIndex
或to_timedelta
和add
(+
) 或减去(-)
值:
df['new'] = df.index - pd.TimedeltaIndex(df['col'], unit='d')
print (df)
col new
2017-04-04 -5.0 2017-04-09
2017-04-03 -5.0 2017-04-08
2017-03-31 -4.0 2017-04-04
2017-03-30 -6.0 2017-04-05
2017-03-29 -5.0 2017-04-03
2017-03-28 -5.0 2017-04-02
或者:
df['new'] = df.index + pd.to_timedelta(df['col'], unit='d')
print (df)
col new
2017-04-04 -5.0 2017-03-30
2017-04-03 -5.0 2017-03-29
2017-03-31 -4.0 2017-03-27
2017-03-30 -6.0 2017-03-24
2017-03-29 -5.0 2017-03-24
2017-03-28 -5.0 2017-03-23
如果Series
为input
添加to_frame
:
df = s.to_frame('date')
df['new'] = df.index - pd.TimedeltaIndex(df['date'], unit='d')
print (df)
date new
2017-04-04 -5.0 2017-04-09
2017-04-03 -5.0 2017-04-08
2017-03-31 -4.0 2017-04-04
2017-03-30 -6.0 2017-04-05
2017-03-29 -5.0 2017-04-03
2017-03-28 -5.0 2017-04-02
【讨论】:
我不确定,所以我会添加两个解决方案。【参考方案2】:IIUC 你想构造一个TimedeltaIndex
并添加这个:
In [173]:
df.index + pd.TimedeltaIndex(df['days'], unit='d')
Out[173]:
DatetimeIndex(['2017-03-30', '2017-03-29', '2017-03-27', '2017-03-24',
'2017-03-24', '2017-03-23'],
dtype='datetime64[ns]', freq=None)
如果是专栏,你就做df['Dates'] + pd.TimedeltaIndex(df['days'], unit='d')
In [176]:
df['offset_date'] = df['Dates'] + pd.TimedeltaIndex(df['days'], unit='d')
df
Out[176]:
Dates days offset_date
0 2017-04-04 -5.0 2017-03-30
1 2017-04-03 -5.0 2017-03-29
2 2017-03-31 -4.0 2017-03-27
3 2017-03-30 -6.0 2017-03-24
4 2017-03-29 -5.0 2017-03-24
5 2017-03-28 -5.0 2017-03-23
如果它是索引并且您想将其添加为列,则几乎是相同的操作:
In [180]:
df['offset_date'] = df.index + pd.TimedeltaIndex(df['days'], unit='d')
df
Out[180]:
days offset_date
Dates
2017-04-04 -5.0 2017-03-30
2017-04-03 -5.0 2017-03-29
2017-03-31 -4.0 2017-03-27
2017-03-30 -6.0 2017-03-24
2017-03-29 -5.0 2017-03-24
2017-03-28 -5.0 2017-03-23
【讨论】:
可能看起来像一个随机评论,但只是想和你一起回顾一下100K
的旅程。我记得看到你发布答案,当我在 2015 年夏天开始回答 NumPy 问题时,我们大约在 35-40K
左右。不知何故,我们的 *** 之旅一直是平行的,不仅在代表方面,而且在通过发布答案并通过清理 dup 问题和类似的东西来保持其清洁来改善 SO 社区的意图。所以,只是想祝贺你取得这一成就和迄今为止的旅程:)
@Divakar 谢谢.. 我一直对你 numpy 的专业知识印象深刻,我总是学到新东西。老实说,由于糟糕的问题或对糟糕/有欺骗/或由于目标转移而不断需要修改答案的问题的第一个答案,我对 SO 有点厌倦。我期待你的 100K 代表目标,无论如何我都会提供帮助
是的,经常需要修改以关闭复制文件,特别是基于数据的语言/模块/包一直是个问题。也许 SO 会设计一个更好的模型来关闭/处理这些。让我们期待最好的,享受现在的时刻:)以上是关于DateOffset Pandas 减法的主要内容,如果未能解决你的问题,请参考以下文章
将 `pandas` 频率字符串转换为 `DateOffset`
使用带有 DateOffset 的 pandas Series.rolling
如何在 Pandas/Numpy 中使用 dateOffset 对日内时间序列数据进行重新采样?
pandas使用pd.DateOffset生成时间偏移量把dataframe数据中的时间数据列统一相减N天缩小向前偏移N天
pandas使用pd.DateOffset生成时间偏移量把dataframe数据中的时间数据列统一相加N天放大向后偏移N天