Dav*_*vid 4 python date dataframe pandas
嗨,我有dataframe多个包含相同ID的行。列之一是日期(升序)。我想计算第一个条目和最后一个条目之间的日期差。
我通过实例化pandas构造函数来做到这一点,如下所示:
g = df.groupby('ID')
print(pd.DataFrame({'first':g.Date.nth(0), 'last':g.Date.nth(-1)}))
Run Code Online (Sandbox Code Playgroud)
第一个值正确,但是最后一个值远不正确。
例如,对于特定ID,first dateis 2000-05-08和last dateis是8/21/2010。输出结果为:
first last
ID
31965.0 2000-05-08 2002-12-29
Run Code Online (Sandbox Code Playgroud)
2002-12-29 在中间的某个地方。
样本数据:
ID Date
31965 5/8/2000
31965 5/10/2000
31965 5/18/2000
31965 5/22/2000
31965 5/23/2000
31965 5/25/2000
31965 5/30/2000
31965 6/7/2000
31965 6/8/2000
31965 6/11/2000
31965 6/13/2000
.....
31965 4/11/2009
31965 5/9/2009
31965 5/16/2009
31965 5/23/2009
31965 2/5/2010
31965 2/26/2010
31965 3/13/2010
31965 4/10/2010
31965 8/21/2010
Run Code Online (Sandbox Code Playgroud)
我希望ID 31965的结果为:5/8/2000和8/21/2010,以便最终确定日期差。
您可以一步一步完成此操作,请确保“日期”列为dtype datetime,
df['Date'] = pd.to_datetime(df['Date'])
df.groupby('ID')['Date'].agg(['first','last'])
Run Code Online (Sandbox Code Playgroud)
现在,我怀疑您的数据可能未正确排序,但是如果您仍然希望最早和最晚日期,可以执行以下操作:
df.groupby('ID')['Date'].agg(['min','max']).rename(columns={'min':'first','max':'last'})
Run Code Online (Sandbox Code Playgroud)
或者您可以使用sort_values:
df.sort_values('Date').groupby('ID')['Date'].agg(['first','last'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3351 次 |
| 最近记录: |