<p>可以对哈希使用<code>groupby</code>方法,然后对<code>date</code>列和<code>iloc</code>使用<code>transform</code>方法来获取第一个元素。您还需要使用<code>pd.to_datetime</code>将日期列转换为日期时间:</p>
<pre><code>In [402]: df
Out[402]:
id date
0 00047331-29e7-4165-833f-3efcfc2ea90f 2015-08-19
1 0005b350-31ac-443c-8244-21a34120c83d 2015-08-20
2 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-10
3 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-07
4 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-04
dates = df.groupby('id')['date'].transform(lambda x: (x - x.iloc[0]))
In [405]: dates
Out[405]:
0 1970-01-01
1 1970-01-01
2 1970-01-01
3 1969-12-29
4 1969-12-26
Name: date, dtype: datetime64[ns]
</code></pre>
<p>我不知道为什么它从1970年1月1日开始印刷,但你可以通过从中减去<code>pd.Timestamp('1970-01-01')</code>来解决这个问题</p>
<pre><code>In [408]: dates - pd.Timestamp('1970-01-01')
Out[408]:
0 0 days
1 0 days
2 0 days
3 -3 days
4 -6 days
Name: date, dtype: timedelta64[ns]
</code></pre>
<p>如果只需要值,可以使用<code>dt.days</code>,然后将其传递到新列<code>age</code>:</p>
<pre><code>df['age'] = (dates - pd.Timestamp('1970-01-01')).dt.days
In [415]: df
Out[415]:
id date age
0 00047331-29e7-4165-833f-3efcfc2ea90f 2015-08-19 0
1 0005b350-31ac-443c-8244-21a34120c83d 2015-08-20 0
2 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-10 0
3 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-07 -3
4 0007da63-6fa6-4c0d-a1b1-b09fb0353853 2015-08-04 -6
</code></pre>