Python中文
首页
教程
问答
标签
搜索
登录
注册
一种快速、有效的方法来计算大Pandas行组之间的时间差?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>假设我在一个数据框中有这个表,其中有几辆车的加油日期:</p> <pre><code>+-------+-------------+ | carId | refill_date | +-------+-------------+ | 1 | 2020-03-01 | +-------+-------------+ | 1 | 2020-03-12 | +-------+-------------+ | 1 | 2020-04-04 | +-------+-------------+ | 2 | 2020-03-07 | +-------+-------------+ | 2 | 2020-03-26 | +-------+-------------+ | 2 | 2020-04-01 | +-------+-------------+ </code></pre> <p>我想添加第三列,<code>time_elapsed</code>,其中包含每次重新填充之间的持续时间</p> <pre><code>+-------+-------------+--------------+ | carId | refill_date | time_elapsed | +-------+-------------+--------------+ | 1 | 2020-03-01 | | +-------+-------------+--------------+ | 1 | 2020-03-12 | 11 | +-------+-------------+--------------+ | 1 | 2020-04-04 | 23 | +-------+-------------+--------------+ | 2 | 2020-03-07 | | +-------+-------------+--------------+ | 2 | 2020-03-26 | 19 | +-------+-------------+--------------+ | 2 | 2020-04-01 | 6 | +-------+-------------+--------------+ </code></pre> <p>下面是我的工作:</p> <pre class="lang-py prettyprint-override"><code>import pandas as pd df = pd.DataFrame data = [ { "carId": 1, "refill_date": "2020-3-1" }, { "carId": 1, "refill_date": "2020-3-12" }, { "carId": 1, "refill_date": "2020-4-4" }, { "carId": 2, "refill_date": "2020-3-7" }, { "carId": 2, "refill_date": "2020-3-26" }, { "carId": 2, "refill_date": "2020-4-1" } ] df = pd.DataFrame(data) df['refill_date'] = pd.to_datetime(df['refill_date']) for c in df['carId'].unique(): df.loc[df['carId'] == c, 'time_elapsed'] = df.loc[df['carId'] == c, 'refill_date'].diff() </code></pre> <p>它返回预期结果:</p> <pre><code>+---+-------+-------------+--------------+ | | carId | refill_date | time_elapsed | +---+-------+-------------+--------------+ | 0 | 1 | 2020-03-01 | NaT | +---+-------+-------------+--------------+ | 1 | 1 | 2020-03-12 | 11 days | +---+-------+-------------+--------------+ | 2 | 1 | 2020-04-04 | 23 days | +---+-------+-------------+--------------+ | 3 | 2 | 2020-03-07 | NaT | +---+-------+-------------+--------------+ | 4 | 2 | 2020-03-26 | 19 days | +---+-------+-------------+--------------+ | 5 | 2 | 2020-04-01 | 6 days | +---+-------+-------------+--------------+ </code></pre> <p>所以,看起来一切正常,但这里有一个陷阱:在我的现实生活实例中,我的数据帧包含350万行,处理需要很长时间,即使它是一个完全数字的内存计算,“只有”1711个组可以循环</p> <p>有没有其他更快捷的方法</p> <p>谢谢</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您只需要使用<code>.groupby</code>:</p> <pre><code>df['time_elapsed'] = df.groupby('carId').diff() </code></pre> <p>输出:</p> <pre><code> refill_date 0 NaT 1 11 days 2 23 days 3 NaT 4 19 days 5 6 days </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
在python3中使用Scipy pearsonr函数
6 回答
在Python3中使用scipy对多个lorentzian进行数据拟合
3 回答
在Python3中使用Script=argv
8 回答
在python3中使用selenium webdriver进行未解析的回溯
7 回答
在python3中使用selenium和phantomjs的网页截图之前如何等待?
10 回答
在Python3中使用Selenium和Requests模块从网页获取文件
5 回答
在python3中使用SIGINT终止函数
10 回答
在Python3中使用SIGTERM时,允许进程完成而不是中断
8 回答
在python3中使用smtplib发送XML内容
3 回答
在python3中使用socket库(RFCOMM模式)重新连接蓝牙设备?
4 回答
在python3中使用sounddevice和numpy编写wav文件
1 回答
在python3中使用Sqlalchemy插入MySQL查找类型错误的原因
8 回答
在python3中使用sqlite、pandas和sqlalchemy很难让rollback工作
7 回答
在python3中使用SQLite的FTS3/4
5 回答
在Python3中使用struct.calcsize()和len()有区别吗?
10 回答
在python3中使用substring函数时发生TypeError
8 回答
在Python3中使用Tkinter entry小部件写入串行设备
6 回答
在python3中使用tkinter时,如何在每次按下函数时获得运行该函数的按钮?
3 回答
在python3中使用tkinter的子帧
5 回答
在Python3中使用tryexcept块时,如何避免使用未初始化的变量?
1 回答