在Pandas数据框中查找模式

时间:2016-02-14 16:17:30

标签: python pandas data-mining data-modeling

我有一个相当大的Pandas数据框,看起来像这样。

                                           id  rssi location         day      time
0        2a463296-bd84-512a-8484-9d79649922ae    58     G-19  2016-01-27  12:35:23
1        c6a18d27-63ba-5457-99c1-4c08f6410e33    74     G-19  2016-01-27  12:35:26
2        ee75fa2d-66d9-52e5-9198-a886288ba044    74     G-19  2016-01-27  12:35:28
3        3dc1f5f5-eab3-541c-97f8-e57f32bdf53d    82     G-19  2016-01-27  12:35:28
4        6c1b9019-a6bc-5ed6-82e6-879b7c120991    62     G-19  2016-01-27  12:35:33
26       2a463296-bd84-512a-8484-9d79649922ae    38     G-20  2016-01-27  12:36:58
27       c6a18d27-63ba-5457-99c1-4c08f6410e33    70     G-20  2016-01-27  12:36:59
28       7edb5047-62b8-58bf-89f4-4151d7b694f4    70     G-20  2016-01-27  12:37:01
29       f4c906a8-7680-5bac-b7a0-be408364a268    58     G-20  2016-01-27  12:37:07

...... ...... ...... ......

1546516  c6a18d27-63ba-5457-99c1-4c08f6410e33    58     G-59  2016-01-27  13:53:44
1546517  2a463296-bd84-512a-8484-9d79649922ae    50     G-59  2016-01-27  13:53:48
1546518  10baa504-7eec-522f-990b-61b3c215352d    50     G-59  2016-01-27  13:53:49
1546519  15ce7c62-3014-5734-9025-b658278cd33a    42     G-59  2016-01-27  13:53:51
1546520  54b281f5-e532-5fd8-b681-e5bffcd4d6bb    62     G-59  2016-01-27  13:53:53
1546521  1300368f-c823-5fa7-8241-0b245f601859    46     G-59  2016-01-27  13:53:55
1546522  79f64138-d332-51c8-a583-686f30eb65f9    70     G-59  2016-01-27  13:53:56

每个ID都是WiFi设备的ID。我正在尝试建立设备运动的图片。例如,我想模拟2a463296-bd84-512a-8484-9d79649922ae如何从G-19到G59但在G20上花了1个多小时,所以我们假设该设备刚刚通过G19。

从我进行的测试中,大多数设备每5分钟至少会看一次。显然,当设备通过其中一个探测器时,可能不会将其视为仅在广播WiFi信标时检测到的。

我希望能够显示设备A位于位置1的x时间,然后转到位置2的y时间或通过出口门的位置c并且没有再次看到小时数。

我只担心设备在某一天而不是其他任何一天所做的事情。

解决这个问题的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

使用布尔选择按ID获取所需的项目。使用日期作为条件进一步选择。使用时间列进行数学运算。如果您想查看设备何时不可见,则在按ID选择后查看特定设备时应该会很明显。

有关详细信息,请参阅pandas docs。 pandas Indexing and Selecting

编辑:

for i in df["day"].unique():
    date_df = df[df["day"]== i]
    ids_seen = set()
    for index, row in date_df.iterrows():
        if row["id"] not in ids_seen:
        '''
          Enter nested loop and do some stuff for each unique id. Add it to a set so we can keep track
        '''
        ids_seen.add(row["id"])