我有以下问题。我想计算每个 id 出现在 df 中的时间段。
data = {'id': [2, 2, 2, 4, 4], 'time': ['22:17:46', '22:19:02', '22:06:00', '22:18:06', '22:18:06']}
pd.DataFrame.from_dict(data)
在上面的示例中,id 2 的所需输出为 22:19:02
- 22:06:00
= 13.03
分钟. 同样 0 代表 id 4. 最后,我想要的是:
data = {'id': [2, 2, 4, 2, 4], 'time': ['22:17:46', '22:19:02', '22:18:06', '22:06:00', '22:18:06'], 'time_diff': [13.03, 13.03, 0, 13.03, 0]}
我尝试过这个,但在大数据上速度非常慢:
data["max_time"] = data.groupby(["ip_adresa"])["time"].transform("max").astype(str)
data["min_time"] = data.groupby(["ip_adresa"])["time"].transform("min").astype(str)
data["time_diff"] = ""
for i in range(0, len(data)):
data["diff_time"][i] = (
datetime.datetime.strptime(data["max_time"][i], format)
- datetime.datetime.strptime(data["min_time"][i], format)
).total_seconds()
请问我该怎么做?
最佳答案
使用变换函数。它迭代 groupby 返回的每一行以查找 id 并查找最小值和最大值。将时间转换为日期时间数据类型
data = {'id': [2, 2, 2, 4, 4], 'time': ['22:17:46', '22:19:02', '22:06:00', '22:18:06', '22:18:06']}
df=pd.DataFrame.from_dict(data)
df['time'] = pd.to_datetime(df['time'])
df['time_diff'] = df.groupby('id')['time'].transform(lambda x: x.max() - x.min())
print(df)
输出
id time time_diff
0 2 2021-11-16 22:17:46 0 days 00:13:02
1 2 2021-11-16 22:19:02 0 days 00:13:02
2 2 2021-11-16 22:06:00 0 days 00:13:02
3 4 2021-11-16 22:18:06 0 days 00:00:00
4 4 2021-11-16 22:18:06 0 days 00:00:00
关于pandas - pandas 列中的开始 - 结束时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69990197/