python - 如果发现重复条目,则在先前特定列值的计数中加 1
问题描述
i have a dataframe like this in pandas
StartTime EndTime RuleCount duser pastcount pastfire
1 2020-09-04 17:19:30 2020-09-04 17:20:00 9 test 1 10
2 2020-09-04 17:21:30 2020-09-04 17:22:00 9 test1 2 20
3 2020-09-04 17:22:30 2020-09-04 17:23:00 9 test 1 5
4 2020-09-04 17:15:30 2020-09-04 17:16:00 9 test 1 5
5 2020-09-04 17:17:30 2020-09-04 17:18:00 9 test1 1 5
6 2020-09-04 17:19:30 2020-09-04 17:20:00 9 test3 0 5
我想要如下所示的输出。如果第一次找到 duser,则只需将重复列中的过去计数复制一次,如果它再存在一次,然后将重复列的前一个值加 1,依此类推。
StartTime EndTime RuleCount duser pastcount pastfire repeat
1 2020-09-04 17:19:30 2020-09-04 17:20:00 9 test 1 10 1
2 2020-09-04 17:21:30 2020-09-04 17:22:00 9 test1 2 20 2
3 2020-09-04 17:22:30 2020-09-04 17:23:00 9 test 1 5 2
4 2020-09-04 17:15:30 2020-09-04 17:16:00 9 test 1 5 3
5 2020-09-04 17:17:30 2020-09-04 17:18:00 9 test1 1 5 3
6 2020-09-04 17:19:30 2020-09-04 17:20:00 9 test3 0 5 0
解决方案
pandas.DataFrame.transform
与 一起使用cumcount
:
g = df.groupby("duser")
df["repeat"] = g["pastcount"].transform("first") + g["duser"].cumcount()
print(df)
输出:
StartTime EndTime RuleCount duser pastcount \
1 2020-09-04 17:19:30 2020-09-04 17:20:00 9 test 1
2 2020-09-04 17:21:30 2020-09-04 17:22:00 9 test1 2
3 2020-09-04 17:22:30 2020-09-04 17:23:00 9 test 1
4 2020-09-04 17:15:30 2020-09-04 17:16:00 9 test 1
5 2020-09-04 17:17:30 2020-09-04 17:18:00 9 test1 1
6 2020-09-04 17:19:30 2020-09-04 17:20:00 9 test3 0
pastfire repeat
1 10 1
2 20 2
3 5 2
4 5 3
5 5 3
6 5 0
推荐阅读
- git - Pattern to remove a specific "/Folder/File.Ext" path combination in GIT
- python - 将列表的元素附加到迭代器的左侧或右侧到另一个列表
- java - How do I make my gradle plugin value depend on whether or not I execute another task?
- javascript - 如何从存储过程中获取分区键范围?
- utf-8 - UniData / CentOS - 指南和修复文件导致语言组错误
- kerberos - Chrome-headless 不喜欢 kerberos 票
- azure - 使用 azure-sdk-for-python 将节点部署到 AKS 群集
- c# - .Net Core 2.1 似乎忽略了 modelBuilder.Entity
().HasData - mysql - 如何正确关闭 NodeJS 到 MySQL 的连接?
- python - 将 2 级 multiidex 系列重新组合为数据框,以便二级索引成为名称?