[英]How to get first and last value of each group in pandas with no group by column?
大家好,我需要從每個組中獲取第一個和最后一個值(計數器值連續為 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
希望 Output:-
2019-03-19:14:40,2019-03-19:15:00
2019-03-19:15:40,2019-03-19:16:00
您可以使用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())))
)
output:
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
您可以按連續的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.