<分区>
我正在尝试找出解决我的问题的最佳方法。考虑以下数据集:
我正在寻找一种迭代循环 panda 表的方法,并标记在每个“事件”“日期”的 24 小时内未重复的任何“事件”。如本示例中的“保留”列所示。
在此示例中,“步行”和“跳跃”都用“0”表示,因为它们在 24 小时时间范围内没有重复的“事件”。
我最初的想法是遍历每一行,根据“日期”加上 24 小时提取行,并检查第一次出现的“事件”,但这似乎非常耗费资源,并且很好奇是否有更简单的方法。
<分区>
我正在尝试找出解决我的问题的最佳方法。考虑以下数据集:
我正在寻找一种迭代循环 panda 表的方法,并标记在每个“事件”“日期”的 24 小时内未重复的任何“事件”。如本示例中的“保留”列所示。
在此示例中,“步行”和“跳跃”都用“0”表示,因为它们在 24 小时时间范围内没有重复的“事件”。
我最初的想法是遍历每一行,根据“日期”加上 24 小时提取行,并检查第一次出现的“事件”,但这似乎非常耗费资源,并且很好奇是否有更简单的方法。
最佳答案
这是一个有趣的问题。除非我误解了什么,否则我怀疑你的例子是不正确的。例如,事件的每次最后出现都应为 0,因为根据定义它是最后一次出现,因此之后不会重复。
也就是说,这很容易。您可以按日期排序、按事件分组并计算连续行之间的时间差。最后,应用一个阈值(此处 < 1 天)。
假设这个输入:
event date
0 R 2000-01-01 11:40:00
1 R 2000-01-01 12:40:00
2 W 2000-01-01 12:40:00
3 S 2000-01-03 11:00:00
4 H 2000-01-03 12:00:00
5 S 2000-01-03 19:00:00
6 H 2000-01-04 13:00:00
7 W 2000-01-03 09:00:00
8 W 2000-01-03 10:00:00
9 H 2000-01-04 14:00:00
df = df.sort_values(by='date')
df['keep'] = (df.groupby('event')['date']
.apply(lambda d: d.diff().shift(-1) < pd.Timedelta('1D'))
.astype(int)
)
输出:
event date keep
0 R 2000-01-01 11:40:00 1
1 R 2000-01-01 12:40:00 0
2 W 2000-01-01 12:40:00 0
3 S 2000-01-03 11:00:00 1
4 H 2000-01-03 12:00:00 0
5 S 2000-01-03 19:00:00 0
6 H 2000-01-04 13:00:00 1
7 W 2000-01-03 09:00:00 1
8 W 2000-01-03 10:00:00 0
9 H 2000-01-04 14:00:00 0
关于python - 如果在 24 小时内重复,则保持值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68499149/
相关文章:
python - 如何使用 python-geojson 从 python 转储格式化 geoJSON 文件?
python - 在Python/pandas中合并不同长度的数据帧
python - 是否可以使用 tqdm 进行 pandas 合并操作?
python - pandas pct_change() 函数返回错误值
python - 在 RandomForestRegressor 中得到连续不支持的错误
python - 如何使用 matplotlib 在绘图的 x 轴上同时显示日期和时间
python - 错误 : unhashable type: 'list' . 使用 df.groupby.apply 时