亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

獲取 Pandas 中最后一次出現特定值后的所有行

獲取 Pandas 中最后一次出現特定值后的所有行

LEATH 2021-11-09 14:38:06
我的數據框看起來像ID  colA  1      B     1      D     2      B    2      D     2      C     我已經在每組中最后一次發生事件 B 后返回所有行。輸出將是:ID  colA   1      D   2      D     2      C  我試過a = df['colA'].str.contains('B').groupby(df['ID'])b = df[(a.transform('sum') - a.cumsum()).eq(0)]到目前為止它運行良好。我只是想知道是否有其他方法可以實現這一目標?
查看完整描述

3 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

國際大學聯盟


def yourlast(x):

        return x.loc[x.colA.where(df.colA.eq('B')).last_valid_index()+1:]

df.groupby('ID').apply(yourlast)

Out[163]: 

      ID colA

ID           

1  1   1    D

2  3   2    D

   4   2    C


查看完整回答
反對 回復 2021-11-09
?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

你可以這樣做:


ix = (df.colA.eq('B')

        .cumsum()

        .groupby(df.ID)

        .apply(lambda x: x.loc[x.idxmax()+1:]).index.get_level_values(1))


df.loc[ix,:]


    ID colA

1   1    D

3   2    D

4   2    C


查看完整回答
反對 回復 2021-11-09
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

反轉您的行(這很重要)。然后調用groupbyand cumsum,并?。ǚ聪颍ヽumsum 值等于零的所有行。


df[df.colA.eq('B')[::-1].astype(int).groupby(df.ID).cumsum().eq(0)]


   ID colA

1   1    D

3   2    D

4   2    C


查看完整回答
反對 回復 2021-11-09
  • 3 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號