pandas 中如何让一列日期减去同一个日期?

2016-09-01 23:39:35 +08:00
 livc
            time loc
0  2014-12-08 18  ad
1  2014-12-09 12  as
2  2014-12-12 12  xs

处理为

  time loc
0    1  ad
1    2  as
2    5  xs

其中 "2014-12-08 18" 代表 14 年 12 月 8 日的 18 点,想把时间这列更新为从12 月 8 日算起的第X天,应该如何操作?

4142 次点击
所在节点    Python
9 条回复
aaronzjw
2016-09-01 23:49:29 +08:00
import time 应该可以吧
20150517
2016-09-02 03:58:10 +08:00
apply
wickila
2016-09-02 09:39:53 +08:00
import pandas as pd
import datetime


def date2day(x):
sd = datetime.datetime.strptime('2014-12-08 0', '%Y-%M-%d %H')
d = datetime.datetime.strptime(x['time'], '%Y-%M-%d %H')
x['time'] = (d - sd).days + 1
return x


df = pd.DataFrame([['2014-12-08 18', 'ad'], ['2014-12-09 12', 'as'], ['2014-12-12 12', 'xs']], columns=['time', 'loc'])
df = df.apply(date2day, axis=1)

print df
xixijun
2016-09-02 10:29:28 +08:00
df['date_diff']=df['time'].diff().fillna(0)+pd.Timedelta('1 days')
livc
2016-09-02 12:21:18 +08:00
@wickila 请问是否有更快的方法?这个函数处理 300 万的数据在我的 mac 上跑了 8 分钟…
livc
2016-09-02 12:39:02 +08:00
@wickila 重大 bug 。。。把 sd 改成 11 月 8 日,输出了负值。。
livc
2016-09-02 12:50:56 +08:00
@wickila 月份占位符应该小写。
wickila
2016-09-02 15:27:44 +08:00
@livc 多谢指正。效率的话,只能小幅度地优化 date2day 函数,不过提升的效率应该有限。看看有没有大神有其他办法。
weimao
2018-04-09 17:42:39 +08:00
td = _df['time']
time = pd.to_datetime(td)
start = pd.datetime(2014, 12, 8)
day = time - start
_df['time'] = day.dt.days

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303347

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX