按组ID

时间:2017-09-20 17:48:36

标签: python pandas timedelta

我在查找数据框内的时间差异时遇到问题。以下代码将输出数据集中每行之间的时差。我想通过ID重置时差。所以我只会看到相同ID之间的差异。任何人都可以指导我阅读文档或给我一些关于如何实现这一目标的提示吗?

Golden['TimeDiff'] = Golden.CREATED_ON.diff().dt.total_seconds()
>>> Golden  
        ID          CREATED_ON             TimeDiff
        2       2014-12-08 03:29:08          NaN
        2       2014-12-08 03:29:08          0.0
        4       2015-02-09 00:10:01          5431253.0

1 个答案:

答案 0 :(得分:0)

首先,您需要按IDCREATED_ON对数据框进行排序。然后,您可以对ID进行分组,并获取CREATED_ON列的差异,该列将为您提供一列Timedelta对象。

# Set-up dataframe.
df = pd.DataFrame(
    {'ID': [2, 2, 4], 
     'CREATED_ON': [pd.Timestamp('2014-12-08 03:29:08'), 
                    pd.Timestamp('2014-12-08 03:29:08'), 
                    pd.Timestamp('2015-02-09 00:10:01')]})
# Sort dataframe on `ID` and `CREATED_ON`.
df = df.sort_values(['ID', 'CREATED_ON'])
# Assign new column based on group time differences.
df = df.assign(TimeDiff=df.groupby('ID')[['CREATED_ON']].transform(
    lambda group: group.diff()))
>>> df
           CREATED_ON  ID TimeDiff
0 2014-12-08 03:29:08   2      NaT
1 2014-12-08 03:29:08   2   0 days
2 2015-02-09 00:10:01   4      NaT