簡體   English   中英

如何在沒有按列分組的情況下獲取 pandas 中每組的第一個和最后一個值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM