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

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

Pandas:根據條件在數據幀組末尾剝離行

Pandas:根據條件在數據幀組末尾剝離行

嗶嗶one 2021-11-02 20:24:18
假設我有以下數據框:df = pd.DataFrame({"id": [1, 1, 1, 2, 2, 2, 3, 3, 3, 3], "date": [pd.Timestamp(2002, 2, 2), pd.Timestamp(2003, 3, 3), pd.Timestamp(2004, 4, 4), pd.Timestamp(2005, 5, 5), pd.Timestamp(2006, 6, 6), pd.Timestamp(2007, 7, 7), pd.Timestamp(2008, 8, 8), pd.Timestamp(2009, 9, 9), pd.Timestamp(2010, 10, 10), pd.Timestamp(2011, 11, 11)], "numeric": [0.9, 0.4, 0.2, 0.6, np.nan, 0.8, 0.7, np.nan, np.nan, 0.5], "nominal": [0, 1, 0, 1, 0, 0, 0, 1, 1, 1]})我想要實現的是在每個組的末尾id去除行(假設行按 分組),這樣這些行將被刪除,直到non-nan該numeric列出現一個值。此外,每個組的最后一行將始終具有non-nan該numeric列的值,并且應始終刪除最后一行。因此,生成的數據幀是:result_df = pd.DataFrame({"id": [1, 1, 2, 3], "date": [pd.Timestamp(2002, 2, 2), pd.Timestamp(2003, 3, 3), pd.Timestamp(2005, 5, 5), pd.Timestamp(2008, 8, 8)], "numeric": [0.9, 0.4, 0.6, 0.7], "nominal": [0, 1, 1, 0]})關于我們如何獲得結果數據幀的更多解釋:因為id == 1只有最后一行被刪除,因為在最后一行之前的行中有該numeric列的值。對于id == 2最后兩行被刪除,因為最后一行默認情況下,該行的最后一個具有前去除nan值。對于id == 3被刪除的最后三個行,因為最后一行是默認和第一去除non-nan值從低于第四行計數。此外,我目前正在做的是:df.groupby("id", as_index=False).apply(lambda x: x.iloc[:-1]).reset_index(drop=True)但是,這只會刪除每個組的最后一行,我想N根據上面解釋的條件刪除最后一行。如果您需要任何進一步的信息,請告訴我,并期待您的回答!
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

對于您發(fā)布的特定示例,在分組之前僅刪除 NaN 即可:


df = df.dropna().groupby('id').apply(lambda x: x.iloc[:-1]).reset_index(drop=True)


df

Out[58]: 

   id       date  numeric  nominal

0   1 2002-02-02      0.9        0

1   1 2003-03-03      0.4        1

2   2 2005-05-05      0.6        1

3   3 2008-08-08      0.7        0

如果您有一個不連續(xù)的 NaN 并且只想刪除最后一個 NaN 塊:


def strip_rows(X):    

    X = X.iloc[:-1, :]

    while pd.isna(X.iloc[-1, 2]):        

        X = X.iloc[:-1, :]

    return X


df_1 = pd.DataFrame({"id": [1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3],

                   "date": [pd.Timestamp(2002, 2, 2),

                            pd.Timestamp(2003, 3, 3), 

                            pd.Timestamp(2004, 4, 4), 

                            pd.Timestamp(2005, 5, 5), 

                            pd.Timestamp(2006, 6, 6),

                            pd.Timestamp(2007, 7, 7),

                            pd.Timestamp(2008, 8, 8),

                            pd.Timestamp(2009, 9, 9),

                            pd.Timestamp(2010, 10, 10), 

                            pd.Timestamp(2011, 11, 11),

                            pd.Timestamp(2011, 12, 12),

                            pd.Timestamp(2012, 1, 1)],

                    "numeric": [0.9, 0.4, 0.2, 0.6, np.nan, 0.8, 0.7, np.nan, np.nan, 0.5, np.nan, 0.3],

                    "nominal": [0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1]})


df_2 = df_1.groupby('id').apply(strip_rows).reset_index(drop=True)


df_1

Out[151]: 

    id       date  numeric  nominal

0    1 2002-02-02      0.9        0

1    1 2003-03-03      0.4        1

2    1 2004-04-04      0.2        0

3    2 2005-05-05      0.6        1

4    2 2006-06-06      NaN        0

5    2 2007-07-07      0.8        0

6    3 2008-08-08      0.7        0

7    3 2009-09-09      NaN        1

8    3 2010-10-10      NaN        1

9    3 2011-11-11      0.5        1

10   3 2011-12-12      NaN        0

11   3 2012-01-01      0.3        1


df_2

Out[152]: 

   id       date  numeric  nominal

0   1 2002-02-02      0.9        0

1   1 2003-03-03      0.4        1

2   2 2005-05-05      0.6        1

3   3 2008-08-08      0.7        0

4   3 2009-09-09      NaN        1

5   3 2010-10-10      NaN        1

6   3 2011-11-11      0.5        1


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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