为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法对 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 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信