python - 根据条件python pandas向数据框添加新行
问题描述
需要根据条件向数据框添加新行。
当前数据框:
在这个数据框中有 4 列。我想要做的是检查“时间”列并检查每个夜班午夜 12 点的最接近值,并添加两个新行作为 11:59:59 和 00:00:01,其值与最近的数据点相同。
例如:03-01 Night 的最接近值(到 12PM)是 21:46:54。所以需要添加两行,
W25 03-01 Night RUNNING 23:59:59
W25 03-01 Night RUNNING 00:00:01
所以最终预期的数据框应该是这样的:
样本数据:
data={'Machine': {0: 'W5', 343: 'W5', 344: 'W5', 586: 'W5', 587: 'W5'}, 'State': {0: 'start', 343: 'STOPPED', 344: 'RUNNING', 586: 'STOPPED', 587: 'MAINT'}, 'Day-Shift': {0: '03-01 Night', 343: '03-01 Night', 344: '03-01 Night', 586: '03-01 Night', 587: '03-01 Night'}, 'Time': {0: Timestamp('2021-03-01 21:00:00'), 343: Timestamp('2021-03-01 22:16:54'), 344: Timestamp('2021-03-01 23:16:54'), 586: Timestamp('2021-03-01 23:48:45'), 587: Timestamp('2021-03-02 02:28:54')}}
真的很感谢你的支持!!!!!!
解决方案
您可以使用idxmax()
查找每天的最大记录,然后创建一个日期时间对象。
df1 = df.loc[df.groupby([df['Time'].dt.normalize()])['Time'].idxmax()]
df1 = pd.concat([df1] * 2)
df1['Time'] = pd.to_datetime((df1['Time'].dt.normalize().astype(str) + [' 23:59:59', ' 00:00:01']))
print(df1)
Machine State Day-Shift Time
587 W25 MAINT 03-01 Day 2021-03-01 23:59:59
587 W25 MAINT 03-01 Day 2021-03-01 00:00:01
df = pd.concat([df,df1]).sort_index().reset_index(drop=True)
Machine State Day-Shift Time
0 W25 start 03-01 Day 2021-03-01 07:00:00
1 W25 STOPPED 03-01 Day 2021-03-01 07:16:54
2 W25 RUNNING 03-01 Day 2021-03-01 07:16:54
3 W25 STOPPED 03-01 Day 2021-03-01 07:28:45
4 W25 MAINT 03-01 Day 2021-03-01 07:28:54
5 W25 MAINT 03-01 Day 2021-03-01 23:59:59
6 W25 MAINT 03-01 Day 2021-03-01 00:00:01
推荐阅读
- php - ScanDir() 返回错误的排序数组 php
- json - 将 spark 数据框中的列聚合为 json
- python - Python - exec 和 timeit 函数之间的奇怪交互
- javascript - 如何获取 Input 的值并将其存储在另一个组件中?
- reactjs - 生成可用时隙的反应函数不会生成正确的时隙
- node.js - DynamoDB - 扫描不返回所有项目
- c# - WPF:如果 TextBox 中的文本发生更改,则更新按钮
- javascript - 活动类 {rcm.samapp/com.comp.android.ui....} 不存在
- reactjs - React Hooks Exhaustive-deps 异步无限循环
- shell - 修改 gupdatedb(GNU updatedb 命令)以插入并行命令