首页 > 解决方案 > 在 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'”
谁能告诉我我做错了什么?

亲切的问候

标签: pythonpandas

解决方案


这是一种方法。

首先,您必须找到进入和退出的差异。然后你必须对这些值进行累计。这会给你想要的结果。请注意,如果第一行的出口多于入口,则第一行可能会以负值结束。

因为我没有你的数据,所以我生成了随机数。实际上,我们不会有消极的人在房间里。所以当你运行我的代码时,你最终可能会在房间里遇到消极的人。这是因为随机整数的生成方式。如果这与实际价值相悖,您将获得所需的结果。

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

推荐阅读