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

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

如何在拆分中添加條件應(yīng)用組合并在每行重復(fù)解決方案?

如何在拆分中添加條件應(yīng)用組合并在每行重復(fù)解決方案?

慕無(wú)忌1623718 2021-08-24 18:13:20
我有以下pandas數(shù)據(jù)框df:cluster   tag   amount   name1         0     200      Michael        2         1     1200     John        2         1     900      Daniel        2         0     3000     David        2         0     600      Jonny        3         0     900      Denisse        3         1     900      Mike        3         1     3000     Kely        3         0     2000     Devon  我需要做的就是添加另一列df是寫入每個(gè)row的name(從名字列)具有最高amount,其中tag為1。換句話說,解決方案看起來(lái)是這樣的:cluster   tag   amount   name     highest_amount1         0     200      Michael  NaN      2         1     1200     John     John   2         1     900      Daniel   John     2         0     3000     David    John    2         0     600      Jonny    John    3         0     900      Denisse  Kely      3         1     900      Mike     Kely   3         1     3000     Kely     Kely   3         0     2000     Devon    Kely我試過這樣的事情:df.group('clusters')['name','amount'].transform('max')[df['tag']==1]但問題在于該名稱確實(shí)會(huì)在每一行上重復(fù)。它看起來(lái)像這樣:cluster   tag   amount   name     highest_amount1         0     200      Michael  NaN      2         1     1200     John     John   2         1     900      Daniel   John     2         0     3000     David    NaN    2         0     600      Jonny    NaN    3         0     900      Denisse  NaN      3         1     900      Mike     Kely   3         1     3000     Kely     Kely   3         0     2000     Devon    NaN有人可以讓我知道如何使用 split apply combine 添加條件,并在每一行上重復(fù)該解決方案嗎?
查看完整描述

1 回答

?
慕少森

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

您可以將其作為一個(gè)兩階段過程來(lái)執(zhí)行。先計(jì)算一個(gè)映射系列,然后按簇映射:


s = df.query('tag == 1')\

      .sort_values('amount', ascending=False)\

      .drop_duplicates('cluster')\

      .set_index('cluster')['name']


df['highest_name'] = df['cluster'].map(s)


print(df)


   cluster  tag  amount     name highest_name

0        1    0     200  Michael          NaN

1        2    1    1200     John         John

2        2    1     900   Daniel         John

3        2    0    3000    David         John

4        2    0     600    Jonny         John

5        3    0     900  Denisse         Kely

6        3    1     900     Mike         Kely

7        3    1    3000     Kely         Kely

8        3    0    2000    Devon         Kely

如果您想使用groupby,這是一種方法:


def func(x):

    names = x.query('tag == 1').sort_values('amount', ascending=False)['name']

    return names.iloc[0] if not names.empty else np.nan


df['highest_name'] = df['cluster'].map(df.groupby('cluster').apply(func))


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

添加回答

舉報(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)