【问题标题】:Subtract smallest timestamp per group from every other timestamp in pandas从 pandas 中的每个其他时间戳中减去每组的最小时间戳
【发布时间】:2017-12-21 18:15:09
【问题描述】:

我有一个这样的 DataFrame:

   Iter    ID       Time
0   1      A      12:00:00
1   1      B      12:00:01
2   1      C      12:00:01
3   2      B      12:02:00
4   2      A      12:02:02
5   2      C      12:02:06
6   3      C      12:05:01
7   3      B      12:05:00
8   3      A      12:05:05

我想从该迭代的最小时间戳中获取每个时间戳的偏移量。

例如,此示例的“Delta”列可以是

   Iter    ID       Time       Delta
0   1      A      12:00:00    00:00:00
1   1      B      12:00:01    00:00:01
2   1      C      12:00:01    00:00:01
3   2      B      12:02:00    00:00:00
4   2      A      12:02:02    00:00:02
5   2      C      12:02:06    00:00:06
6   3      C      12:05:01    00:00:01
7   3      B      12:05:00    00:00:00
8   3      A      12:05:05    00:00:05

我的第一个想法是使用 apply,但不确定如何仅在 Iter 组上使用。

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    使用groupby + transform + min 执行此操作,然后从Time 中减去结果。

    df.Time = pd.to_timedelta(df.Time)  # if needed
    df['Delta'] = df.Time - df.groupby('Iter').Time.transform('min')
    
    df
    
       Iter ID     Time    Delta
    0     1  A 12:00:00 00:00:00
    1     1  B 12:00:01 00:00:01
    2     1  C 12:00:01 00:00:01
    3     2  B 12:02:00 00:00:00
    4     2  A 12:02:02 00:00:02
    5     2  C 12:02:06 00:00:06
    6     3  C 12:05:01 00:00:01
    7     3  B 12:05:00 00:00:00
    8     3  A 12:05:05 00:00:05
    

    我使用pd.to_timedeltaTime 转换为Timedelta 对象列(支持算术)。如果Time 已经是Timedelta 列,请跳过该步骤。

    【讨论】:

    • @ayhan 啊,就是这样。现在完美了,干杯(另外,在您发表评论之前正在编辑时间增量)
    • 是的,看到了。 :)
    • 哇,谢谢!这比我想象的要简单得多。
    猜你喜欢
    • 2022-09-24
    • 2018-10-17
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2014-04-25
    • 2021-03-17
    相关资源
    最近更新 更多