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

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

如何在 Pandas 中用多個唯一字符串替換重復(fù)值?

如何在 Pandas 中用多個唯一字符串替換重復(fù)值?

開滿天機(jī) 2022-07-12 17:37:29
import pandas as pdimport numpy as npdata = {'Name':['Tom', 'Tom', 'Jack', 'Terry'], 'Age':[20, 21, 19, 18]} df = pd.DataFrame(data)假設(shè)我有一個看起來像這樣的數(shù)據(jù)框。我試圖弄清楚如何檢查名稱列中的值“湯姆”,如果我第一次找到它,我將其替換為值“FirstTom”,而第二次出現(xiàn)時,我將其替換為值“SecondTom” . 你如何做到這一點(diǎn)?我之前使用過 replace 方法,但僅用于用單個值替換所有 Toms。我不想在值的末尾添加 1,而是將字符串完全更改為其他內(nèi)容。編輯:如果 df 看起來更像下面這樣,我們將如何檢查第一列和第二列中的 Tom,然后用 FirstTom 替換第一個實(shí)例,用 SecondTom 替換第二個實(shí)例data = {'Name':['Tom', 'Jerry', 'Jack', 'Terry'], 'OtherName':[Tom, John, Bob,Steve]}
查看完整描述

4 回答

?
白豬掌柜的

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

只需添加到現(xiàn)有的解決方案中,您就可以使用inflect創(chuàng)建動態(tài)字典


import inflect

p = inflect.engine()


df['Name'] += df.groupby('Name').cumcount().add(1).map(p.ordinal).radd('_')

print(df)

        Name  Age

0    Tom_1st   20

1    Tom_2nd   21

2   Jack_1st   19

3  Terry_1st   18


查看完整回答
反對 回復(fù) 2022-07-12
?
茅侃侃

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

我們可以做的cumcount


df.Name=df.Name+df.groupby('Name').cumcount().astype(str)

df

     Name  Age

0    Tom0   20

1    Tom1   21

2   Jack0   19

3  Terry0   18

更新


suf = lambda n: "%d%s"%(n,{1:"st",2:"nd",3:"rd"}.get(n if n<20 else n%10,"th"))

g=df.groupby('Name')



df.Name=df.Name.radd(g.cumcount().add(1).map(suf).mask(g.Name.transform('count')==1,''))

df

     Name  Age

0  1stTom   20

1  2ndTom   21

2    Jack   19

3   Terry   18

更新 2 列


suf = lambda n: "%d%s"%(n,{1:"st",2:"nd",3:"rd"}.get(n if n<20 else n%10,"th"))


g=s.groupby([s.index.get_level_values(0),s])

s=s.radd(g.cumcount().add(1).map(suf).mask(g.transform('count')==1,''))

s=s.unstack()

     Name OtherName

0  1stTom    2ndTom

1   Jerry      John

2    Jack       Bob

3   Terry     Steve


查看完整回答
反對 回復(fù) 2022-07-12
?
紅顏莎娜

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

編輯:對于每行重復(fù)的計數(shù),請使用:


df = pd.DataFrame(data = {'Name':['Tom', 'Jerry', 'Jack', 'Terry'], 

                          'OtherName':['Tom', 'John', 'Bob','Steve'],

                          'Age':[20, 21, 19, 18]})


print (df)

    Name OtherName  Age

0    Tom       Tom   20

1  Jerry      John   21

2   Jack       Bob   19

3  Terry     Steve   18


import inflect

p = inflect.engine()


#map by function for dynamic counter

f = lambda i: p.number_to_words(p.ordinal(i))

#columns filled by names

cols = ['Name','OtherName']

#reshaped to MultiIndex Series

s = df[cols].stack()

#counter per groups

count = s.groupby([s.index.get_level_values(0),s]).cumcount().add(1)

#mask for filter duplicates

mask = s.reset_index().duplicated(['level_0',0], keep=False).values

#filter only duplicates and map, reshape back and add to original data

df[cols] = count[mask].map(f).unstack().add(df[cols], fill_value='')

print (df)

       Name  OtherName  Age

0  firstTom  secondTom   20

1     Jerry       John   21

2      Jack        Bob   19

3     Terry      Steve   18

使用GroupBy.cumcountwith Series.map,但僅適用于重復(fù)值 by Series.duplicated:


data = {'Name':['Tom', 'Tom', 'Jack', 'Terry'], 'Age':[20, 21, 19, 18]} 

df = pd.DataFrame(data)


nth = {

0: "First",

1: "Second",

2: "Third",

3: "Fourth"

}


mask = df.Name.duplicated(keep=False)

df.loc[mask, 'Name'] = df[mask].groupby('Name').cumcount().map(nth) + df.loc[mask, 'Name']

print (df)

        Name  Age

0   FirstTom   20

1  SecondTom   21

2       Jack   19

3      Terry   18

動態(tài)字典應(yīng)該是這樣的:


import inflect

p = inflect.engine()


mask = df.Name.duplicated(keep=False)

f = lambda i: p.number_to_words(p.ordinal(i))

df.loc[mask, 'Name'] = df[mask].groupby('Name').cumcount().add(1).map(f) + df.loc[mask, 'Name']

print (df)


        Name  Age

0   firstTom   20

1  secondTom   21

2       Jack   19

3      Terry   18


查看完整回答
反對 回復(fù) 2022-07-12
?
牧羊人nacy

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

transform

nth = ['First', 'Second', 'Third', 'Fourth']


def prefix(d):

    n = len(d)

    if n > 1:

        return d.radd([nth[i] for i in range(n)])

    else:

        return d


df.assign(Name=df.groupby('Name').Name.transform(prefix))


          Name  Age

0     FirstTom   20

1    SecondTom   21

2         Jack   19

3        Terry   18

4   FirstSteve   17

5  SecondSteve   16

6   ThirdSteve   15


查看完整回答
反對 回復(fù) 2022-07-12
  • 4 回答
  • 0 關(guān)注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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