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

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

Python groupby - 根據(jù)其他列中的條件更改列值

Python groupby - 根據(jù)其他列中的條件更改列值

陪伴而非守候 2023-11-09 22:06:25
我想首先對(duì)“組”列進(jìn)行分組。然后根據(jù)結(jié)果列和排名列中的條件更改結(jié)果列中的值。這就是我現(xiàn)在所擁有的:import pandas as pdimport numpy as npgroup = ['g1','g1','g1','g1','g1','g2','g2','g2','g2','g2','g2']rank = ['1','2','3','4','5','1','2','3','4','5','6']result = ['1','4','2','4','4','1','4','4','2','4','4']df = pd.DataFrame({"group": group, "rank": rank, "result": result})    group   rank    result0   g1        1       11   g1        2       42   g1        3       23   g1        4       44   g1        5       45   g2        1       16   g2        2       47   g2        3       48   g2        4       29   g2        5       410  g2        6       4在同一組中,當(dāng)排名大于結(jié)果 = 2 的排名時(shí),我想將結(jié)果從 4 更改為 6例如:在 g1 中,結(jié)果 = 2 的排名是 3。因此排名 4 和 5 的結(jié)果將是 6。在 g2 中,result = 2 的排名是 4。因此排名 5 和 6 的結(jié)果將是 6。在這種情況下,我想要的輸出將是:    group   rank    result0   g1        1       11   g1        2       42   g1        3       23   g1        4       64   g1        5       65   g2        1       16   g2        2       47   g2        3       48   g2        4       29   g2        5       610  g2        6       6我不知道實(shí)現(xiàn)這一目標(biāo)的最佳方法。有人可以幫忙嗎?
查看完整描述

2 回答

?
眼眸繁星

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

用于Series.where替換結(jié)果中與 byrank匹配NaN的行2,然后用于GroupBy.transform每組重復(fù)值 by?GroupBy.first,最后比較更大的 by并在 中Series.gt設(shè)置值:6DataFrame.loc

#convert to integers for correct compare values greater like '10'

df[['rank','result']] = df[['rank','result']].astype(int)


s = df['rank'].where(df['result'].eq(2)).groupby(df['group']).transform('first')


df.loc[df['rank'].gt(s), 'result'] = 6

print (df)

? ?group? rank? result

0? ? ?g1? ? ?1? ? ? ?1

1? ? ?g1? ? ?2? ? ? ?4

2? ? ?g1? ? ?3? ? ? ?2

3? ? ?g1? ? ?4? ? ? ?6

4? ? ?g1? ? ?5? ? ? ?6

5? ? ?g2? ? ?1? ? ? ?1

6? ? ?g2? ? ?2? ? ? ?4

7? ? ?g2? ? ?3? ? ? ?4

8? ? ?g2? ? ?4? ? ? ?2

9? ? ?g2? ? ?5? ? ? ?6

10? ? g2? ? ?6? ? ? ?6


查看完整回答
反對(duì) 回復(fù) 2023-11-09
?
莫回?zé)o

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

這就能解決問題


import pandas as pd

import numpy as np


group = ['g1','g1','g1','g1','g1','g2','g2','g2','g2','g2','g2']

rank = ['1','2','3','4','5','1','2','3','4','5','6']

result = ['1','4','2','4','4','1','4','4','2','4','4']


df = pd.DataFrame({"group": group, "rank": rank, "result": result})


def changeDf(x):

    df_gp = df[df['group'] == x['group']]

    rank_of_2 = df_gp.loc[df_gp['result'] =='2', 'rank'].values[0]

    if int(x['rank']) > int(rank_of_2):

        return '6'

    else:

        return x['result']


df['result'] = df.apply(changeDf, axis=1)

print(df)


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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