python - 添加日期之间差异的列 pandas DataFrame
问题描述
我有这种数据框:
season Date Holiday_Name
12-13 11/1/12 NaN
12-13 11/2/12 Nan
12-13 3/31/13 Easter
12-13 4/5/13 NaN
13-14 11/1/13 NaN.
13-14 4/18/14 Nan.
13-14 4/20/14 Easter.
13-14 4/22/14 Nan.
ETC...
我需要的是一个新的专栏,在这个专栏中,每个季节都有与复活节的天数不同。
我已经尝试过使用 groupby、for 循环(即使我知道这是错误的),where 方法似乎没有任何效果。
dataset["difference"] = dataset["Date"] -dataset["Date"].where(dataset["holiday_name"]=="Easter").days
但它给了我这个错误:
“系列”对象没有属性“天”
或者
dataset['differenza_pasqua'] = pd.Index(dataset["Data"] -dataset["Data"].where(dataset["holiday_name"]=="Pasqua di Resurrezione").dropna()).days
有了这个,我可以在复活节将其设置为 0,但其他的则标记为 NaN。
我期望的是这样的:
season Date Holiday_Name difference
12-13 11/1/12 NaN 150
12-13 11/2/12 NaN 149.
12-13 3/31/13 Easter 0.
12-13 4/5/13 NaN 5.
13-14 11/1/13 NaN 150.
13-14 4/18/14 Nan 2.
13-14 4/20/14 Easter 0.
13-14 4/22/14 Nan 2.
谢谢你的帮助。
解决方案
使用groupby很容易解决。
ddf = df.groupby('season').apply(lambda x : x['Date'] - x.loc[x['Holiday_Name'] == 'Easter']['Date'].iloc[0]).reset_index()
df['difference'] = ddf['Date']
season Date Holiday_Name difference
0 12-13 2012-11-01 NaN -150 days
1 12-13 2012-11-02 Nan -149 days
2 12-13 2013-03-31 Easter 0 days
3 12-13 2013-04-05 NaN 5 days
4 13-14 2013-11-01 NaN -170 days
5 13-14 2014-04-18 Nan -2 days
6 13-14 2014-04-20 Easter 0 days
7 13-14 2014-04-22 Nan 2 days
注意:您需要从“Nan. Easter”中的数据中删除点。
推荐阅读
- twilio - 处理来电 - 广播给多个代理
- c# - 如何从另一个字典中减去一个字典?
- asp.net - ASP.NET - 传输文件和 Response.End 将“线程中止”附加到文件内容
- javascript - AJAX 返回状态码 0?允许使用 CORS。这个 AJAX 是否实现不正确?
- c++ - 我的字符串末尾有 4 个相同的垃圾字符
- python - Pandas - TypeError:元组索引必须是整数或切片,而不是 str
- android - android studio:缺少 android 支持库的代码完成源代码
- php - 包括请求文件、重写Url、管理PHP中的404错误
- google-apis-explorer - Gmail Api Python:功能删除不起作用
- node.js - 如何实现账户激活链接过期?