首页 > 解决方案 > For 循环计算日期时间列中的分钟并附加到秒

问题描述

我有一个数据框,我需要在 datetime 列中添加第二个单位。我尝试了各种重采样方法,但我不能!!!这是我的数据样本。

$

id  date_time
73430677    4:24:00
73430688    4:24:00
73430703    4:24:00
73430713    4:24:00
73430718    4:24:00
73430728    4:24:00
73430771    4:25:00
73430818    4:25:00
73430864    4:25:00
73430904    4:25:00
73430942    4:25:00
73430993    4:25:00

我如何计算相似的分钟数,然后根据它们的数量生成第二个间隔 uinte。例如,4:24:00 重复了六次,然后每 10 秒收集一次数据。

我正在寻找一种计算相似分钟数的解决方案,然后通过以第二个单位计算数据收集时间间隔(60/(重复分钟数)),将第二个值附加到 datetime 列。

目标日期时间列

我欢迎任何实用的解决方案!!!!

标签: pandasdataframedatetimefor-loop

解决方案


  • 修改了您的样本数据,因此有一组 6 和一组 5
  • groupby().transform()计算要添加到时间的秒数
  • 添加秒数
  • 清理临时列
from pathlib import Path
df = pd.read_csv(io.StringIO("""id  date_time
73430677    4:24:00
73430688    4:24:00
73430703    4:24:00
73430713    4:24:00
73430718    4:24:00
73430728    4:24:00
73430771    4:25:00
73430818    4:25:00
73430904    4:25:00
73430942    4:25:00
73430993    4:25:00"""), sep="\s+")

# add a dummy column
df["x"] = 1
f = Path.cwd().joinpath("SO_seconds.csv")
df.to_csv(f)

# read from a file
df = pd.read_csv(f)
df.date_time = pd.to_datetime(df.date_time)
# do the actual requirement
df = (df.assign(secs=df.groupby("date_time")["id"].transform(lambda s: [((i+1)/len(s))*60 for i,v in enumerate(s)]),
         date_time=lambda dfa: dfa.apply(lambda r: r.date_time + pd.Timedelta(seconds=r.secs), axis=1).dt.time)
 .drop(columns=["secs"])
)
ID 约会时间
0 73430677 04:24:10
1 73430688 04:24:20
2 73430703 04:24:30
3 73430713 04:24:40
4 73430718 04:24:50
5 73430728 04:25:00
6 73430771 04:25:12
7 73430818 04:25:24
8 73430904 04:25:36
9 73430942 04:25:48
10 73430993 04:26:00

推荐阅读