基于Pandas中的另一列值添加列列表

ovfsdjhp  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个 Dataframe df:

Date          Product  value    Offer
2022-01-01    x_00_02   0.16    5
2022-01-01    x_00_02   0.16    5
2022-01-01    x_00_02   0.16    5
2022-01-01    x_00_02   0.16    5
2022-01-01    x_00_02   0.18    6
2022-01-01    x_00_02   0.18    6
2022-01-01    x_00_02   0.18    6
2022-01-01    x_00_02   0.18    6
2022-01-01    x_02_04   0.32    10
2022-01-01    x_02_04   0.32    10
2022-01-01    x_02_04   0.32    10
2022-01-01    x_02_04   0.32    10
2022-01-01    x_04_06   0.45    11
2022-01-01    x_04_06   0.45    11
2022-01-01    x_04_06   0.45    11
2022-01-01    x_04_06   0.45    11
2022-01-01    x_04_06   0.47    7
2022-01-01    x_04_06   0.47    7
2022-01-01    x_04_06   0.47    7
2022-01-01    x_04_06   0.47    7
...

每个单独的“产品”重复4次(因为这是由前面的代码实现的),并且可以根据值列进行标识。df已经按照日期、产品和值进行了排序。
我想要添加一个新列,根据Product列计算每个“产品”,以便:

  • 计数开始于:(最小值 * 2)+ 1
  • 计数结束于:最大值 * 2
  • 计数表示为:val_0xx,其中xx表示计数值

对于产品x_00_02(最小值= 00,最大值= 02):

  • 计数开始于:(0*2)+1 =有效值_001
  • 计数结束时间:2*2 =有效值_004

预期产出:

Date          Product  value    Offer  Product_2
2022-01-01    x_00_02   0.16    5      val_001 
2022-01-01    x_00_02   0.16    5      val_002 
2022-01-01    x_00_02   0.16    5      val_003 
2022-01-01    x_00_02   0.16    5      val_004 
2022-01-01    x_00_02   0.18    6      val_001 
2022-01-01    x_00_02   0.18    6      val_002 
2022-01-01    x_00_02   0.18    6      val_003 
2022-01-01    x_00_02   0.18    6      val_004 
2022-01-01    x_02_04   0.32    10     val_005
2022-01-01    x_02_04   0.32    10     val_006
2022-01-01    x_02_04   0.32    10     val_007
2022-01-01    x_02_04   0.32    10     val_008
2022-01-01    x_04_06   0.45    11     val_009
2022-01-01    x_04_06   0.45    11     val_010
2022-01-01    x_04_06   0.45    11     val_011
2022-01-01    x_04_06   0.45    11     val_012
2022-01-01    x_04_06   0.47    7      val_009
2022-01-01    x_04_06   0.47    7      val_010
2022-01-01    x_04_06   0.47    7      val_011
2022-01-01    x_04_06   0.47    7      val_012
ippsafx7

ippsafx71#

您可以用途:

df['Product_2'] = (df.drop_duplicates()['Product'].str.split('_')
                     .map(lambda x: range(int(x[1])*2+1, int(x[2])*2+1))
                     .explode().astype(str).str.zfill(3).radd('val_').tolist())
print(df)

# Output
          Date  Product  value  Offer Product_2
0   2022-01-01  x_00_02   0.16      5   val_001
1   2022-01-01  x_00_02   0.16      5   val_002
2   2022-01-01  x_00_02   0.16      5   val_003
3   2022-01-01  x_00_02   0.16      5   val_004
4   2022-01-01  x_00_02   0.18      6   val_001
5   2022-01-01  x_00_02   0.18      6   val_002
6   2022-01-01  x_00_02   0.18      6   val_003
7   2022-01-01  x_00_02   0.18      6   val_004
8   2022-01-01  x_02_04   0.32     10   val_005
9   2022-01-01  x_02_04   0.32     10   val_006
10  2022-01-01  x_02_04   0.32     10   val_007
11  2022-01-01  x_02_04   0.32     10   val_008
12  2022-01-01  x_04_06   0.45     11   val_009
13  2022-01-01  x_04_06   0.45     11   val_010
14  2022-01-01  x_04_06   0.45     11   val_011
15  2022-01-01  x_04_06   0.45     11   val_012
16  2022-01-01  x_04_06   0.47      7   val_009
17  2022-01-01  x_04_06   0.47      7   val_010
18  2022-01-01  x_04_06   0.47      7   val_011
19  2022-01-01  x_04_06   0.47      7   val_012

相关问题