如何在Pandas中基于另一列值添加指定格式的计数列
解决Pandas DataFrame添加Product_2列的问题
嘿,这个需求很明确,咱们可以通过Pandas的字符串处理、分组和序列生成来实现,一步步来:
步骤1:提取Product中的数值信息
首先从Product列拆分出最小值和最大值的数字部分,转成整数方便计算:
import pandas as pd # 假设你的DataFrame已经加载为df # 拆分Product列,提取中间的min和max数值 df[['prefix', 'min_p', 'max_p']] = df['Product'].str.split('_', expand=True) df['min_p'] = df['min_p'].astype(int) df['max_p'] = df['max_p'].astype(int)
步骤2:计算每个Product的计数区间
根据规则计算每个Product对应的起始值和结束值:
# 计算起始值:(最小值×2)+1 df['start'] = df['min_p'] * 2 + 1 # 计算结束值:最大值×2 df['end'] = df['max_p'] * 2
步骤3:生成Product_2列
每个(Product, value)组正好有4行,而我们计算的区间长度刚好是4(比如x_00_02的区间是1-4,共4个数),所以按这两个字段分组后,给每组生成连续序列并格式化:
# 分组生成序列,然后展开匹配每行 df['Product_2'] = df.groupby(['Product', 'value']).apply( lambda group: [f"val_{num:03d}" for num in range(group['start'].iloc[0], group['end'].iloc[0]+1)] ).explode()
步骤4:清理中间列
最后删掉我们临时用的中间列,得到最终结果:
# 移除临时列 df = df.drop(['prefix', 'min_p', 'max_p', 'start', 'end'], axis=1)
验证结果
运行完上面的代码后,你的DataFrame就会和预期输出一致:
- x_00_02的每个value组会生成
val_001到val_004 - x_02_04的每个value组会生成
val_005到val_008 - x_04_06的每个value组会生成
val_009到val_012
内容的提问来源于stack exchange,提问作者OAP
相关产品推荐
相关产品推荐

