我有一个包含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()修复了这个问题。在
我想您需要使用^{} 创建的掩码^{} :
^{pr2}$
相关问题 更多 >
编程相关推荐