[英]How to create a sliding window for merging different entries?
我有以下 DataFrame df
:
id datetime_event cameraid platenumber
11 2017-05-01T00:00:08 AAA 11A
12 2017-05-01T00:00:08 AAA 223
13 2017-05-01T00:00:08 BBB 11A
14 2017-05-01T00:00:09 BBB 33D
15 2017-05-01T00:00:09 DDD 44F
16 2017-05-01T01:01:00 AAA 44F
17 2017-05-01T01:01:01 BBB 44F
18 2017-05-01T01:01:09 AAA 556
19 2017-05-01T01:01:09 AAA 778
20 2017-05-01T01:01:11 EEE 666
對於每天的每個小時,我想選擇最多 100 個title
為 (AAA, BBB) 且相同platenumber
條目, platenumber
出現在AAA
,其次出現在BBB
。
例如,對於上面給出的示例 DataFrame,輸出將是這樣的:
id datetime_event cameraid platenumber
11 2017-05-01T00:00:08 AAA 11A
13 2017-05-01T00:00:08 BBB 11A
16 2017-05-01T01:01:00 AAA 44F
17 2017-05-01T01:01:01 BBB 44F
每天每小時的前 100 個條目可以通過以下方式提取:
df = df[df.groupby(pd.to_datetime(df['datetime_event']).dt.floor('H')).cumcount() < 100]
但是,我如何按title
過濾(這是最重要的)如何按platenumber
合並,以便隨后出現相同的車牌號值,首先出現在AAA
,然后出現在BBB
?
使用過濾器:
編輯:
#first filter only AAA, BBB for less data
df = df[df['cameraid'].isin(['AAA','BBB'])]
df1 = (df.groupby([pd.to_datetime(df['datetime_event']).dt.floor('H'),'platenumber'])
.filter(lambda x: (x['cameraid'].values == ['AAA','BBB']).all()))
print (df1)
d datetime_event cameraid platenumber
0 11 2017-05-01T00:00:08 AAA 11A
2 13 2017-05-01T00:00:08 BBB 11A
5 16 2017-05-01T01:01:00 AAA 44F
6 17 2017-05-01T01:01:01 BBB 44F
舊解決方案:
#first filter only AAA, BBB for less data
df = df[df['cameraid'].isin(['AAA','BBB'])]
#filter only 2 size groups and check if 1. value is AAA and 2. BBB
def f(x):
return len(x) == 2 and \
x['cameraid'].iat[0] == 'AAA' and \
x['cameraid'].iat[1] == 'BBB'
df = df.groupby([pd.to_datetime(df['datetime_event']).dt.floor('H'),'platenumber']).filter(f)
print (df)
d datetime_event cameraid platenumber
0 11 2017-05-01T00:00:08 AAA 11A
2 13 2017-05-01T00:00:08 BBB 11A
5 16 2017-05-01T01:01:00 AAA 44F
6 17 2017-05-01T01:01:01 BBB 44F
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.