第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取多索引熊貓系列級別內(nèi)序列的第一個和最后一個元素

獲取多索引熊貓系列級別內(nèi)序列的第一個和最后一個元素

素胚勾勒不出你 2021-12-17 10:36:26
我有一個系列,它的狀態(tài)可以是 True 或 False。它有一個 MultiIndex,第一級是 ID,第二級是每個 ID 中的一個劇集,第三級是記錄狀態(tài)的日期。ID  Episode Date        Statusfoo 1       2019-02-01  False            2019-02-02  True            2019-02-03  True            2019-02-04  False    2       2019-02-05  True            2019-02-06  True            2019-02-07  False    3       2019-02-08  False            2019-02-09  True            2019-02-10  Truebar 1       2019-03-03  False            2019-03-04  True    2       2019-03-05  True            2019-03-06  True            2019-03-07  False            2019-03-08  True            2019-03-09  False我想將一集中狀態(tài)何時開始為真以及何時停止為真的日期提取到數(shù)據(jù)幀中。對于這個例子,結(jié)果應(yīng)該是這樣的: ID Episode Start Dates             End Dates       foo 1       2019-02-02              2019-03-03              2       2019-02-05              2019-02-06      3       2019-02-09              2019-02-10bar 1       2019-03-04              2019-03-04    2       2019-03-05, 2019-03-08  2019-03-06, 2019-03-08
查看完整描述

2 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗 獲得超8個贊

檢查使用groupbywithcumsum創(chuàng)建組的內(nèi)部密鑰,下一步我們True根據(jù) df 中的所有值進(jìn)行過濾,然后我們groupby使用新密鑰進(jìn)行另一輪first last,join結(jié)果


s=(~df.Status).groupby(level=['ID','Episode']).cumsum().reset_index()


s[df.Status.values].groupby(['ID','Episode','Status'])['Date'].agg(['first','last']).groupby(level=[0,1]).agg(','.join)

Out[104]: 

                             first                   last

ID  Episode                                              

bar 1                   2019-03-04             2019-03-04

    2        2019-03-05,2019-03-08  2019-03-06,2019-03-08

foo 1                   2019-02-02             2019-02-03

    2                   2019-02-05             2019-02-06

    3                   2019-02-09             2019-02-10


查看完整回答
反對 回復(fù) 2021-12-17
?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗 獲得超6個贊

您也可以使用pandas.Series.shift將您的Status列移一位。


df['prev_Status'] = df['Status'].shift(1)

df['next_Status'] = df['Status'].shift(-1)


                    Status  prev_Status next_Status

Date            

foo 1   2019-02-01  False   NaN     True

        2019-02-02  True    False   True

        2019-02-03  True    True    False

        2019-02-04  False   True    True

2       2019-02-05  True    False   True

        2019-02-06  True    True    False

一旦被轉(zhuǎn)移,您可以True在打開時按預(yù)期查詢


df.query('prev_Status=="False"').query('Status=="True"').groupby(level=[0,1]).Date.agg(','.join)


bar  1    2019-03-04

     2    2019-03-08

foo  1    2019-02-02

     2    2019-02-05

     3    2019-02-09

Name: Date, dtype: object

或者什么時候關(guān)閉


df.query('Status=="True"').query('next_Status=="False"').groupby(level=[0,1]).Date.agg(','.join)


bar  2    2019-03-06,2019-03-08

foo  1               2019-02-03

     2               2019-02-06

     3               2019-02-10

Name: Date, dtype: object

有人可能會爭辯說,這比另一個(非常好的)答案效率低,但更容易理解。


查看完整回答
反對 回復(fù) 2021-12-17
  • 2 回答
  • 0 關(guān)注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號