如何在Python的Pandas中对每个组进行时间差计算。
在使用Pandas和Python编写代码时,有一个问题是如何在每个组中计算时间差。下面是一个示例代码:
import pandas as pd df = pd.DataFrame({'email': ['u1','u1','u1','u2','u2','u2'], 'timestamp': [3, 1, 5, 11, 15, 9]}) (df.sort_values(['email', 'timestamp'], ascending=[True, False]) .groupby('email')['timestamp'] .diff(-1) .dropna())
这段代码的目的是计算每个电子邮件组中的时间差。输出结果如下:
2 2.0 0 2.0 4 4.0 3 2.0 Name: timestamp, dtype: float64
为了保留电子邮件列,可以使用以下代码:
df.sort_values(['email', 'timestamp'], ascending=[True, False], inplace=True) df.assign(diff=df.groupby('email')['timestamp'].diff(-1)).dropna()
这样输出结果将包含电子邮件列:
email timestamp diff 2 u1 5 2.0 0 u1 3 2.0 4 u2 15 4.0 3 u2 11 2.0
如果不想保留时间戳列,可以在末尾添加`.drop('timestamp', axis=1)`代码。这样索引也会更有意义。谢谢。
我们可以将索引(2、0、4、3)切换为对应的电子邮件列吗?谢谢。
嘿,还有一个问题,如果我去掉`inplace=True`并将两个提示连接在一起,结果是不正确的,为什么会这样?
因为在这种情况下,分组的值是针对未排序(原始)数据框的。