如何用Pandas替换DataFrame中商品成本为同商品上一次成本并删除首次记录
Pandas实现替换商品Cost为上一次记录并删除首次条目
首先创建原始DataFrame:
import pandas as pd data = {'ID': ['A', 'B', 'C', 'A', 'C', 'O', 'B', 'A', 'B', 'O'], 'Item':['Apple','Banana','Carrot','Apple', 'Carrot', 'Orange', 'Banana', 'Apple', 'Banana', 'Orange'], 'Cost':[10, 12, 15, 13, 54, 20, 73, 22, 19, 32]} df = pd.DataFrame(data)
方法一:利用cumcount标记行号结合shift
# 为每个商品分组标记行号(从0开始) df['row_num'] = df.groupby('Item').cumcount() # 过滤掉每组首次记录,同时将Cost替换为同组上一次的Cost result = df[df['row_num'] >= 1].assign( Cost=lambda x: x.groupby('Item')['Cost'].shift(1) ).drop('row_num', axis=1).reset_index(drop=True)
方法二:分组后处理每组数据
def process_group(group): # 移除每组的第一条记录 group = group.iloc[1:] # 将Cost替换为同组上一行的Cost值 group['Cost'] = group['Cost'].shift(1) return group result = df.groupby('Item', group_keys=False).apply(process_group).reset_index(drop=True)
两种方法最终得到的结果都与目标DataFrame一致:
print(result) # 输出: # ID Item Cost # 0 A Apple 10.0 # 1 C Carrot 15.0 # 2 B Banana 12.0 # 3 A Apple 13.0 # 4 B Banana 73.0 # 5 O Orange 20.0
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

