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

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

Python:過濾數(shù)據(jù)僅按活動標(biāo)記和日期保留最后數(shù)據(jù)

Python:過濾數(shù)據(jù)僅按活動標(biāo)記和日期保留最后數(shù)據(jù)

江戶川亂折騰 2022-09-13 17:37:36
我已按數(shù)據(jù)集排序():DateIDdfDate          ID      Start_flag    End_flag                               01-01-2019    100     1             0     01-02-2019    100     0             001-03-2019    100     0             001-04-2019    100     0             001-05-2019    100     0             101-09-2019    100     1             0 01-10-2019    100     0             001-11-2019    100     0             001-12-2019    100     0             001-03-2019    500     1             0     01-04-2019    500     0             001-05-2019    500     0             001-06-2019    500     0             001-07-2019    500     0             001-08-2019    500     0             0 01-09-2019    700     1             001-10-2019    700     0             001-11-2019    700     0             1我想按最后一個實際值進(jìn)行過濾,其中出現(xiàn)=1,之前所有與=1相同的數(shù)據(jù)都不應(yīng)該被提取。dfDateStart_flagIDStart_flag換句話說,如果發(fā)生幾次相同的情況,則僅保留最后一次最大 。Start_flag=1IDStart_flag=1Date預(yù)期視圖為:dfDate          ID      Start_flag    End_flag                               01-09-2019    100     1             0 01-10-2019    100     0             001-11-2019    100     0             001-12-2019    100     0             001-03-2019    500     1             0     01-04-2019    500     0             001-05-2019    500     0             001-06-2019    500     0             001-07-2019    500     0             001-08-2019    500     0             0 01-09-2019    700     1             001-10-2019    700     0             001-11-2019    700     0             1 我試圖通過 來做到這一點(diǎn),但這不是正確的方法。.groupby(['ID','Start_flag'])['Date'].last()你能幫我如何過濾額外的數(shù)據(jù)嗎?謝謝df
查看完整描述

2 回答

?
墨色風(fēng)雨

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

不是悸子


result = []

for i in df['ID'].unique():

    adf = df[df['ID'] == i].sort_values(by="Date").reset_index(drop=True)

    i = adf.where(adf['Start_flag'] == 1).last_valid_index()

    result.append(adf.iloc[range(i, len(adf))])   

print (pd.concat(result).reset_index(drop=True))

輸出:


         Date   ID  Start_flag  end

0  2019-01-09  100           1    0

1  2019-01-10  100           0    0

2  2019-01-11  100           0    0

3  2019-01-12  100           0    0

4  2019-01-03  500           1    0

5  2019-01-04  500           0    0

6  2019-01-05  500           0    0

7  2019-01-06  500           0    0

8  2019-01-07  500           0    0

9  2019-01-08  500           0    0

10 2019-01-09  700           1    0

11 2019-01-10  700           0    0

12 2019-01-11  700           0    1

注意:我們可以通過將邏輯移動到函數(shù)并通過 調(diào)用函數(shù)來避免循環(huán)。但是,在拳頭組上運(yùn)行函數(shù)兩次,因此我們必須確保我們的函數(shù)沒有副作用。applygroupbygroupby


使用分組:


def fun(adf):

    adf = adf.sort_values(by="Date").reset_index(drop=True)

    i = adf.where(adf['Start_flag'] == 1).last_valid_index()

    return adf.iloc[range(i, len(adf))]


print (df.groupby('ID').apply(fun).reset_index(drop=True))


查看完整回答
反對 回復(fù) 2022-09-13
?
精慕HU

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

最終更正的解決方案是:


def validateData(adf):  

    adf = adf.sort_values(by="Date").reset_index(drop=True)

    indx = adf.where(((adf['Start_flag']==0) & (adf['Date']==adf['Date'].min())) | (adf['Start_flag'] == 1)).last_valid_index()


    return adf.iloc[range(indx, len(adf))]


def filterData(df):

    start_time = datetime.now()

    print('Start_time=', start_time)

    RESULT_DF = df.groupby('ID').apply(lambda x: validateData(x))

    print("--- %s seconds ---" % (datetime.now() - start_time))

    return RESULT_DF

要應(yīng)用于數(shù)據(jù):RESULT_DF = filterData(df)


查看完整回答
反對 回復(fù) 2022-09-13
  • 2 回答
  • 0 關(guān)注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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