亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

有沒有辦法對 pandas 數據框中的一組重復項目進行編號?

有沒有辦法對 pandas 數據框中的一組重復項目進行編號?

慕仙森 2024-01-15 17:16:56
我有一個包含區域、客戶和一些交付的數據框。此列用作購買類型,第一次和最后一次購買被標記為“第一次”和“最后一次”,但任何中間交付都被標記為“交付”是否有一種方法可以轉換交付并獲得標簽“交貨 1”、“交貨 2”等?import pandas as pd  data = [['NY', 'A','FIRST', 10], ['NY', 'A','DELIVERY', 20], ['NY', 'A','DELIVERY', 30], ['NY', 'A','LAST', 25],       ['NY', 'B','FIRST', 15], ['NY', 'B','DELIVERY', 10], ['NY', 'B','LAST', 20],       ['FL', 'A','FIRST', 15], ['FL', 'A','DELIVERY', 10], ['NY', 'A','DELIVERY', 12], ['NY', 'A','DELIVERY', 25], ['NY', 'A','LAST', 20]       ]   # Create the pandas DataFrame df = pd.DataFrame(data, columns = ['Region', 'Client', 'purchaseType', 'price'])   # print dataframe. df 期望的輸出:data2 = [['NY', 'A','FIRST', 10], ['NY', 'A','DELIVERY1', 20], ['NY', 'A','DELIVERY2', 30], ['NY', 'A','LAST', 25],       ['NY', 'B','FIRST', 15], ['NY', 'B','DELIVERY1', 10], ['NY', 'B','LAST', 20],       ['FL', 'A','FIRST', 15], ['FL', 'A','DELIVERY1', 10], ['NY', 'A','DELIVERY2', 12], ['NY', 'A','DELIVERY3', 25], ['NY', 'A','LAST', 20]       ] df2 = pd.DataFrame(data2, columns = ['Region', 'Client', 'purchaseType', 'price']) print(df2)提前致謝!
查看完整描述

2 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

您可以使用np.where來決定在哪里添加數字后綴:


df['purchaseType'] = df.groupby((df['purchaseType']=='FIRST').cumsum())['purchaseType'].transform(

    lambda x: np.where(x=='DELIVERY', x+np.arange(len(x)).astype(str), x)

)


print(df)

印刷:


   Region Client purchaseType  price

0      NY      A        FIRST     10

1      NY      A    DELIVERY1     20

2      NY      A    DELIVERY2     30

3      NY      A         LAST     25

4      NY      B        FIRST     15

5      NY      B    DELIVERY1     10

6      NY      B         LAST     20

7      FL      A        FIRST     15

8      FL      A    DELIVERY1     10

9      NY      A    DELIVERY2     12

10     NY      A    DELIVERY3     25

11     NY      A         LAST     20


查看完整回答
反對 回復 2024-01-15
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

我們可以嘗試使用GroupBy.cumcountandSeries.str.cat

blocks = df['purchaseType'].eq('FIRST').cumsum()

fill_values = df['purchaseType'].str.cat(df.groupby(blocks)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.cumcount().astype(str),?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sep='')

df.loc[df['purchaseType'].eq('DELIVERY'), 'purchaseType'] = fill_values

print(df)


#? ? Region Client purchaseType? price

# 0? ? ? NY? ? ? A? ? ? ? FIRST? ? ?10

# 1? ? ? NY? ? ? A? ? DELIVERY1? ? ?20

# 2? ? ? NY? ? ? A? ? DELIVERY2? ? ?30

# 3? ? ? NY? ? ? A? ? ? ? ?LAST? ? ?25

# 4? ? ? NY? ? ? B? ? ? ? FIRST? ? ?15

# 5? ? ? NY? ? ? B? ? DELIVERY1? ? ?10

# 6? ? ? NY? ? ? B? ? ? ? ?LAST? ? ?20

# 7? ? ? FL? ? ? A? ? ? ? FIRST? ? ?15

# 8? ? ? FL? ? ? A? ? DELIVERY1? ? ?10

# 9? ? ? NY? ? ? A? ? DELIVERY2? ? ?12

# 10? ? ?NY? ? ? A? ? DELIVERY3? ? ?25

# 11? ? ?NY? ? ? A? ? ? ? ?LAST? ? ?20


查看完整回答
反對 回復 2024-01-15
  • 2 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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