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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

簡(jiǎn)化代碼。我的作品,但看起來(lái)像地獄一樣丑陋

簡(jiǎn)化代碼。我的作品,但看起來(lái)像地獄一樣丑陋

慕少森 2022-08-11 17:42:54
我在處理Python時(shí)遇到了麻煩。我有PD數(shù)據(jù)幀,我需要?jiǎng)h除所有行,這些行是在特定值之后(在代碼值中寫(xiě)入稱為年份的列表)所有值都應(yīng)按公司名稱分組,因?yàn)檫@些obserevation屬于“inn_main”列中提到的公司。我真的不明白如何使用Pandas功能做到這一點(diǎn)。我找到了一種方法,但它非常丑陋,效率不高。import pandas as pd data = {'inn_main':['Apple', 'Apple', 'Apple', 'Apple', 'Tesla', 'Tesla', 'Tesla'], 'Help':['OK', 'OK', 2013, 'OK','OK', 2014, 'OK']} df = pd.DataFrame(data) droper=[]block=0years=[2012,2013,2014,2015,2016,2017,2018]for j in range(len(list(df['Help'].groupby(df['inn_main'])))):    alarm=0    for i in range(len(list(df['Help'].groupby(df['inn_main']))[j][1].index.values)):        if list(df['Help'].groupby(df['inn_main']))[j][1][list(df['Help'].groupby(df['inn_main']))[j][1].index.values[i].astype(int)] in years:            block=1            alarm=1        if block==1:            block=0        else:            if alarm==1:                droper.append(list(df['Help'].groupby(df['inn_main']))[j][1].index.values[i].astype(int))   df.drop(index=droper)你能告訴我我到底做錯(cuò)了什么嗎?有什么捷徑嗎?
查看完整描述

3 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

解決方案出奇地短:


df.groupby('inn_main').apply(lambda grp:

    grp[~grp.Help.isin(years).cumsum().shift(fill_value=0).astype(bool)])

結(jié)果是:


           inn_main  Help

inn_main                 

Apple    0    Apple    OK

         1    Apple    OK

         2    Apple  2013

Tesla    4    Tesla    OK

         5    Tesla  2014

詳:

  • df.groupby('inn_main')- 按公司對(duì)數(shù)據(jù)幀進(jìn)行分組。

  • apply(lambda grp:- 將 lambda 函數(shù)應(yīng)用于每個(gè)組。

  • grp.Help.isin(years)幫助是否以年為單位有價(jià)值?

  • .cumsum()- 上述問(wèn)題的累計(jì)總和。

  • shift(fill_value=0)- 將結(jié)果向下移動(dòng)1行,用0填充任何NaN(實(shí)際上是第一項(xiàng))。

  • astype(bool)- 將整數(shù)轉(zhuǎn)換為布爾。

  • ~- 否定上述結(jié)果

  • [...]- 在布爾索引中使用上述結(jié)果。

  • grp[...]- 從當(dāng)前組返回“好”行(它們將是當(dāng)前組的結(jié)果的一部分)。

注意ASGM 的解決方案僅刪除第一行,在包含“幫助”的任何行之后,第一行“確定”。

要確認(rèn)這一點(diǎn),請(qǐng)將另一行包含 Tesla 和 OK 添加到 DataFrame 并運(yùn)行他的代碼。

結(jié)果是:

  inn_main  Help

0    Apple    OK

1    Apple    OK

2    Apple  2013

4    Tesla    OK

5    Tesla  2014

7    Tesla    OK

因此,索引 == 7(應(yīng)刪除)的行存在。


查看完整回答
反對(duì) 回復(fù) 2022-08-11
?
慕的地6264312

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

我不完全理解你的要求,但這就是我認(rèn)為你想要的。給定以下數(shù)據(jù)幀...


   Help inn_main

0    OK    Apple

1    OK    Apple

2  2013    Apple

3    OK    Apple

4    OK    Tesla

5  2014    Tesla

6    OK    Tesla

...您希望標(biāo)識(shí) 列表中的每一行,并刪除其后面的行(在屬于給定公司的行中)。如果這是正確的,你可以做得更簡(jiǎn)單:df.Helpyears


years = range(2012, 2019)

df[~df.groupby('inn_main')['Help'].apply(lambda g: g.isin(years).shift().fillna(False))]

這將提供:


   Help inn_main

0    OK    Apple

1    OK    Apple

2  2013    Apple

4    OK    Tesla

5  2014    Tesla

如果要?jiǎng)h除公司內(nèi)給定行后面的所有行,Valdi_Bo的完整答案將顯示如何操作。


查看完整回答
反對(duì) 回復(fù) 2022-08-11
?
拉風(fēng)的咖菲貓

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊

我不太了解panda,也不知道你想做什么,但這里是重構(gòu)的代碼,用于迭代列表而不是使用索引:


import pandas as pd 

data = {'inn_main':['Apple', 'Apple', 'Apple', 'Apple', 'Tesla', 'Tesla', 'Tesla'], 'Help':['OK', 'OK', 2013, 'OK','OK', 2014, 'OK']} 

df = pd.DataFrame(data) 

droper=[]

years=[2012,2013,2014,2015,2016,2017,2018]

for j in list(df['Help'].groupby(df['inn_main'])):

    alarm=False

    for i in j[1].index.values:

        if j[1][i.astype(int)] in years:

            alarm=True

        elif alarm:

            droper.append(i.astype(int))   

df.drop(index=droper)


查看完整回答
反對(duì) 回復(fù) 2022-08-11
  • 3 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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