pandas - 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 列。
我欢迎任何实用的解决方案!!!!
解决方案
- 修改了您的样本数据,因此有一组 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 |
推荐阅读
- python-3.x - 比较数据时字符串出现语法错误
- javascript - vuejs 将数据返回给嵌套变量
- c# - EF Core 无法从多个表返回数据
- jenkins - Jenkins 在私有 Bower 存储库上超时
- r - 从R中的日期持续时间中提取开始日期
- asp.net-core - 在约定驱动的开发中排除一个作为控制器的类?
- java - 无法使用带有 ChromeOptions 的 Java Selenium ChromeDriver 导航到网站
- r - 一次从变量中删除一个数据元素(值)并在 R 中执行函数
- reactjs - 我在测试我的自定义组件时遇到问题
- fluentd - 如何防止 td-agent / fluentd 插入不需要的元数据?