python - 在 pandas 数据帧/时间序列中累积进入和退出
问题描述
假设我有一个房间和一个 dataframe(/timeseries) df
,它在一列中有每分钟的时间戳,在其他两列&df['timestamp']
中每分钟都有条目和退出(那些可能是 0)。
现在我想创建第四列,它告诉我房间里有多少人。
当我尝试df['entries']
df['exits']
df['count']
df['count'] = 0
df['count'] = df.apply(lambda x: x['count'].shift(periods=1) + x['entries'] - x['exits'], axis=1)
我得到一个“AtributeError:'int'对象没有属性'shift'”
谁能告诉我我做错了什么?
亲切的问候
解决方案
这是一种方法。
首先,您必须找到进入和退出的差异。然后你必须对这些值进行累计。这会给你想要的结果。请注意,如果第一行的出口多于入口,则第一行可能会以负值结束。
因为我没有你的数据,所以我生成了随机数。实际上,我们不会有消极的人在房间里。所以当你运行我的代码时,你最终可能会在房间里遇到消极的人。这是因为随机整数的生成方式。如果这与实际价值相悖,您将获得所需的结果。
import pandas as pd
import random
from datetime import datetime
datelist = pd.date_range(start='2021-01-17', end=datetime.today(), freq='60min')
entries = random.sample(range(0,40),len(datelist))
exits = random.sample(range(0,20),len(datelist))
df = pd.DataFrame({'date':datelist,'entries':entries,'exits':exits})
df['diff'] = df['entries'] - df['exits']
df['diff'] = df['diff'].cumsum()
print (df)
date entries exits
0 2021-01-17 00:00:00 12 12
1 2021-01-17 01:00:00 31 14
2 2021-01-17 02:00:00 33 15
3 2021-01-17 03:00:00 29 11
4 2021-01-17 04:00:00 8 13
5 2021-01-17 05:00:00 5 2
6 2021-01-17 06:00:00 16 1
7 2021-01-17 07:00:00 3 5
8 2021-01-17 08:00:00 38 18
9 2021-01-17 09:00:00 37 0
10 2021-01-17 10:00:00 13 9
11 2021-01-17 11:00:00 27 17
12 2021-01-17 12:00:00 2 10
13 2021-01-17 13:00:00 14 7
14 2021-01-17 14:00:00 35 3
15 2021-01-17 15:00:00 26 8
16 2021-01-17 16:00:00 28 4
date entries exits diff
0 2021-01-17 00:00:00 12 12 0
1 2021-01-17 01:00:00 31 14 17
2 2021-01-17 02:00:00 33 15 35
3 2021-01-17 03:00:00 29 11 53
4 2021-01-17 04:00:00 8 13 48
5 2021-01-17 05:00:00 5 2 51
6 2021-01-17 06:00:00 16 1 66
7 2021-01-17 07:00:00 3 5 64
8 2021-01-17 08:00:00 38 18 84
9 2021-01-17 09:00:00 37 0 121
10 2021-01-17 10:00:00 13 9 125
11 2021-01-17 11:00:00 27 17 135
12 2021-01-17 12:00:00 2 10 127
13 2021-01-17 13:00:00 14 7 134
14 2021-01-17 14:00:00 35 3 166
15 2021-01-17 15:00:00 26 8 184
16 2021-01-17 16:00:00 28 4 208
推荐阅读
- react-native - 基于状态的条件渲染不适用于状态更改
- android - Android Pie 上的 Delphi Android API 级别 28 - 如何获得前台服务权限?
- java - 我有一个mysql连接问题,虽然我用相同的参数连接到命令行
- docker - 空白新 Cassandra-Cluster 中的代币平衡
- h2o - R 和 Python 中的 H2O Automl
- c# - 布局设计在 VS 2019 中未正确显示
- java - 两个列表之间的同步
- javascript - 如何在浏览器中编辑网页的 javascript 源
- wordpress - Wordpress添加动作'init'不工作的前端
- python - 正则表达式在没有重复连续字符的句子中查找单词