python - 从循环条件(while、list id、counter、timestamp...)创建一个新列
问题描述
我想用这个数据框创建一个新的时间戳列:
Timestamp Flag
0 2019-10-21 07:48:28.272688 end
1 2019-10-21 07:48:28.449916 end
2 2019-10-21 07:48:26.740378 begin
3 2019-10-21 07:48:26.923764 begin
4 2019-10-21 07:48:41.689466 end
5 2019-10-21 07:48:37.306045 begin
6 2019-10-21 07:58:00.774449 end
7 2019-10-21 07:57:59.223986 begin
8 2019-10-21 08:32:37.004455 end
9 2019-10-21 08:32:35.755252 begin
原理很简单:
- 计数器从 0 开始
对于每一行,如果我有一个结束 => 计数器 +=1 否则(我有一个开始)=> 计数器 -=1
当 counter == 0 => 将时间戳的 id 保存在列表中
- 当 counter = 0 时,必须保存下一行
- 当循环结束时,用与列Timestamp的id对应的值填充新列'New_Timestamp。
所以结果一定是:
Timestamp Flag
0 2019-10-21 07:48:28.272688 end
2 2019-10-21 07:48:26.740378 begin
3 2019-10-21 07:48:26.923764 begin
4 2019-10-21 07:48:41.689466 end
5 2019-10-21 07:48:37.306045 begin
6 2019-10-21 07:58:00.774449 end
7 2019-10-21 07:57:59.223986 begin
8 2019-10-21 08:32:37.004455 end
9 2019-10-21 08:32:35.755252 begin
因为:First end => counter = 1 (save(第一行), ct = 2, ct = 1(save), ct = 0 (save), (save) ct = 1; ct =0 (save)...
目前我无法将相应的值添加到 ID 中,也许我在代码中忘记了 (a) 条件。
我的一段代码:
counter = 0
i = 0
while i < len(df):
id_timestamp_to_save = []
if df.loc[i, 'Flag'] == 'end':
counter +=1
if counter == 1:
id_timestamp_to_save = list(range(i))
else:
counter -=1
if counter == 0:
id_timestamp_to_save = list(range(i))
df['New_Timestamp'] = df['New_Timestamp'].assign(id_timestamp_to_save)
i+=1
请帮帮我。
解决方案
根据您的逻辑,只需替换end
为1
和begin
,-1
然后cumsum
:
counters = df.Flag.map({'end':1,'begin':-1}).cumsum().eq(0)
df[counters | counters.shift(fill_value=True)]
输出:
Timestamp Flag
0 2019-10-21 07:48:28.272688 end
3 2019-10-21 07:48:26.923764 begin
4 2019-10-21 07:48:41.689466 end
5 2019-10-21 07:48:37.306045 begin
6 2019-10-21 07:58:00.774449 end
7 2019-10-21 07:57:59.223986 begin
8 2019-10-21 08:32:37.004455 end
9 2019-10-21 08:32:35.755252 begin
推荐阅读
- java - 接口的实现/扩展何时不应返回比接口上声明的类型更具体的类型?
- google-chrome-extension - 带有 Manifest v3 的 Sandbox 中的 Chrome 扩展中的 WebAssembly
- java - 如何在 JavaFX 中使用 HBox 将某些元素放置在画布上的特定位置?
- android - Moshi 使用动态内部数据类创建 json
- ruby - 为什么在这个问题中需要 uniq?(红宝石)
- python - 根据某些值对字典进行排序
- json - 如何使用 vertx routingcontext 返回 Json 数组
- mongodb - 允许设置分析的 MongoDB 用户角色
- cron - 如何在本地运行 Oban 作业?
- arrays - Swift 数组移动函数的行为与您预期的不同 - 为什么?