Pandas,以一种有用的方式对数据帧进行排序,以找出时间之间的差异。为什么出现键和值错误?

2024-10-02 02:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含5列的pandas数据帧。在

['date', 'sensorId', 'readerId', 'rssi']
df_json['time'] = df_json.date.dt.time

我的目标是找到进入商店的人(rssi>;380)。然而,如果我也能检查传感器ID出现的每个记录,以及该记录中的时间是否在当前记录的5秒之内,这将更加准确。在

来自dataFrame的数据:(df_json)

^{pr2}$

我想用耶兹雷尔对df['date'].diff()的回答。但是我不能成功地使用这个,我收到许多不同的错误。['date']列的数据类型为datetime64[ns]。在

上面的数据存储方式并不有用,要使.diff()有任何用途,必须按如下方式存储数据(dfEntered):

示例数据:dfEntered

    date       sensorId readerId time            rssi
    2017-03-17 4000046  43       12:47:06.639000 364
                        62       12:49:34.438000 423
               4000068  56       09:20:17.708000 374
                        60       09:20:42.561000 392
                        76       09:15:59.453000 352
               4000072  20       12:54:35.738000 373
                                 12:54:42.673000 374
                        25       12:54:24.848000 402
                                 12:54:39.723000 406
                        62       12:52:28.430000 430
                                 12:52:32.593000 394
               4000236  18       13:28:14.834000 411

我打算用“日期”代替“时间”。时间是dtype对象,我似乎无法对其进行强制转换或diff()。“date”将同样有用。在

使df_json显示为dfEntered的唯一方法是: 数据中心=数据框_json.groupby(by=[df_json.date.dt.time,'sensorId','readerId','date'])

如果我这样做:

dfEntered = df_json.groupby(by=[df_json.date.dt.time, 'sensorId', 'readerId'])['date'].diff()

结果:

File "processData.py", line 61, in <module>
dfEntered = df_json.groupby(by=[df_json.date.dt.date, 'sensorId', 'readerId', 'rssi'])['date'].diff()
  File "<string>", line 17, in diff
  File "C:\Users\danie\Anaconda2\lib\site-packages\pandas\core\groupby.py", line 614, in wrapper
    raise ValueError
ValueError

如果我这样做:

dfEntered = df_json.groupby(by=[df_json.date.dt.date, 'sensorId', 'readerId', 'rssi'])['time'].count()
print(dfEntered['date'])

结果:

File "processData.py", line 65, in <module>
    print(dfEntered['date'])
  File "C:\Users\danie\Anaconda2\lib\site-packages\pandas\core\series.py", line 601, in __getitem__
    result = self.index.get_value(self, key)
  File "C:\Users\danie\Anaconda2\lib\site-packages\pandas\core\indexes\multi.py", line 821, in get_value
    raise e1
KeyError: 'date'

我对groupby应用了一个.count()以便可以输出它。我以前尝试过一个.agg({'date':'diff'}),它在valueError中重新查找,但是数据类型是datetime64[ns](至少在原始df_json中,我无法查看dfEntered['date'的数据类型]

如果上面的方法可行,我希望df为[df_json.date.dt.date,'sensorId','readerId','mask']如果他们进入商店,则掩码为true。在

然后我有下面的df(包含接收到文本的sensorid)

   sensor_id sms_status                date_report  rssi  readerId
0    5990100    SUCCESS 2017-05-03 13:41:28.412800   500  10
1    5990001    SUCCESS 2017-05-03 13:41:28.412800   500  11
2    5990100    SUCCESS 2017-05-03 13:41:30.413000   500  12
3    5990001    SUCCESS 2017-05-03 13:41:31.413100   500  13
4    5990100    SUCCESS 2017-05-03 13:41:34.413400   500  14
5    5990001    SUCCESS 2017-05-03 13:41:35.413500   500  52
6    5990100    SUCCESS 2017-05-03 13:41:38.413800   500  60
7    5990001    SUCCESS 2017-05-03 13:41:39.413900   500  61

我想把这两天的感觉合并在一起。 我希望这会导致df出现_json.date.dt.date、'sensorId'、'readerId'、'mask']因此我可以说,掩码为true的sensorId是一种转换。一个转换是传感器ID当天收到一个文本,并在当天进入商店。在

我开始担心我的最终目标甚至无法实现,因为我还不明白熊猫是如何工作的:D(该死的错误)

更新

dfEntered = dfEntered.reset_index() 

这允许我访问日期并应用差异

我不太明白这个问题是如何发生的,以及为什么reset_index()修复了这个问题。在


Tags: 数据jsondfdatetimelinedtdiff
1条回答
网友
1楼 · 发布于 2024-10-02 02:44:40

我想您需要使用^{}创建的掩码^{}

df = pd.DataFrame({'rssi': [500,530,1020,1201,1231,10], 
                   'time': pd.to_datetime(['2017-01-01 14:01:08','2017-01-01 14:01:14',
                                           '2017-01-01 14:01:17', '2017-01-01 14:01:27',
                                           '2017-01-01 14:01:29', '2017-01-01 14:01:30'])})
print (df)
   rssi                time
0   500 2017-01-01 14:01:08
1   530 2017-01-01 14:01:14
2  1020 2017-01-01 14:01:17
3  1201 2017-01-01 14:01:27
4  1231 2017-01-01 14:01:29
5    10 2017-01-01 14:01:30

^{pr2}$

相关问题 更多 >

    热门问题