嗨,伙計們,我需要從每組中獲取第一個和最后一個值(其中計數器值連續為 1)
我的輸入:-
TIMESTAMP,COUNTER
2019-03-19:13:50,0
2019-03-19:14:00,0
2019-03-19:14:10,0
2019-03-19:14:20,0
2019-03-19:14:30,0
2019-03-19:14:40,1
2019-03-19:14:50,1
2019-03-19:15:00,1
2019-03-19:15:10,0
2019-03-19:15:20,0
2019-03-19:15:30,0
2019-03-19:15:40,1
2019-03-19:15:50,1
2019-03-19:16:00,1
期望的輸出:-
2019-03-19:14:40,2019-03-19:15:00
2019-03-19:15:40,2019-03-19:16:00
uj5u.com熱心網友回復:
1您可以通過聚合最小和最大的連續值進行聚合TIMESTAMP:
m = df['COUNTER'].ne(1)
df = (df[~m].groupby((m | m.shift()).cumsum())
.agg(TIMESTAMP_min=('TIMESTAMP','min'), TIMESTAMP_max=('TIMESTAMP','max'))
.reset_index(drop=True))
print (df)
TIMESTAMP_min TIMESTAMP_max
0 2019-03-19:14:40 2019-03-19:15:00
1 2019-03-19:15:40 2019-03-19:16:00
編輯:測驗組:
print (df)
TIMESTAMP COUNTER
0 2019-03-19:13:50 0
1 2019-03-19:14:00 0
2 2019-03-19:14:10 0
3 2019-03-19:14:20 0
4 2019-03-19:14:30 0
5 2019-03-19:14:40 1
6 2019-03-19:14:50 1
7 2019-03-19:15:00 1
8 2019-03-19:15:10 0
9 2019-03-19:15:20 0
10 2019-03-19:15:30 0
11 2019-03-19:15:40 1
12 2019-03-19:15:50 1
13 2019-03-19:16:00 1
m = df['COUNTER'].ne(1)
print ((m | m.shift()).cumsum()[~m])
5 6
6 6
7 6
11 10
12 10
13 10
Name: COUNTER, dtype: int32
uj5u.com熱心網友回復:
你可以使用GroupBy.agg.
假設您有字串,并且給定您的 YYYY-MM-DD:HH:MM 格式,您可以直接使用min/max來獲取第一個/最后一個,因為字串排序將為您提供邏輯時間排序。
(df.loc[df['COUNTER'].eq(1), 'TIMESTAMP']
.groupby(df['COUNTER'].diff().eq(1).cumsum())
.agg(lambda x: ','.join((x.min(), x.max())))
)
輸出:
COUNTER
1 2019-03-19:14:40,2019-03-19:15:00
2 2019-03-19:15:40,2019-03-19:16:00
Name: TIMESTAMP, dtype: object
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439413.html
上一篇:使用熊貓尋找日常平衡?
下一篇:更快地轉換資料集中的值
