擅长:python、mysql、java
<p>您描述的是Pandas<code>Split-Apply-Combine</code>方法。<a href="http://pandas.pydata.org/pandas-docs/stable/groupby.html" rel="nofollow">http://pandas.pydata.org/pandas-docs/stable/groupby.html</a></p>
<p>我们可以根据用户Id进行分组,然后为每个组应用一个函数来计算行之间的差异。在</p>
<p>让我们设置数据帧:</p>
<pre><code>import pandas as pd
data = [
{'User Id': '9272', 'Timestamp': '2015-08-20T15:52:53'},
{'User Id': '26121', 'Timestamp': '2015-10-29T14:44:06'},
{'User Id': '9272', 'Timestamp': '2015-07-21T16:21:55'},
]
df = pd.DataFrame(data)
df['Timestamp'] = pd.to_datetime(df['Timestamp'])
</code></pre>
<p>现在定义一个将在每个组上操作的函数,并应用它。在</p>
<p>该函数按时间戳排序,并为每一行创建一个新的<code>Delta</code>列,设置为自身与前一行之间的差异。如果没有前一行(即第一次购买),则返回NaT。在</p>
^{pr2}$
<p>生成的数据帧如下所示:</p>
<pre><code> Timestamp User Id Delta
1 2015-10-29 14:44:06 26121 NaT
2 2015-07-21 16:21:55 9272 NaT
0 2015-08-20 15:52:53 9272 29 days 23:30:58
</code></pre>