如何在Pandas中为各订单添加标记最新修订版的列
如何标记Pandas DataFrame中订单的最新修订版?
假设我们有这样一个记录订单信息的DataFrame,包含订单编号、修订编号和总价:
OrderNum RevNum TotalPrice 0AXL3 0 $5.00 0AXL3 1 $4.00 0AXL3 2 $7.00 0AXL3 3 $8.00 0BDF1 0 $3.00 0BDF1 1 $2.50 0BDF1 2 $8.50
我们需要添加一列NewestRevision,标记该行是否为对应订单的最新修订版,期望输出如下:
OrderNum RevNum TotalPrice NewestRevision 0AXL3 0 $5.00 No 0AXL3 1 $4.00 No 0AXL3 2 $7.00 No 0AXL3 3 $8.00 Yes 0BDF1 0 $3.00 No 0BDF1 1 $2.50 No 0BDF1 2 $8.50 Yes
解决方案
我们可以利用Pandas的分组功能和简单的比较操作来实现这个需求,具体步骤和代码如下:
import pandas as pd # 构造示例DataFrame data = { 'OrderNum': ['0AXL3', '0AXL3', '0AXL3', '0AXL3', '0BDF1', '0BDF1', '0BDF1'], 'RevNum': [0, 1, 2, 3, 0, 1, 2], 'TotalPrice': ['$5.00', '$4.00', '$7.00', '$8.00', '$3.00', '$2.50', '$8.50'] } df = pd.DataFrame(data) # 添加NewestRevision标记列 df['NewestRevision'] = df.groupby('OrderNum')['RevNum'].transform(lambda x: x == x.max()).map({True: 'Yes', False: 'No'}) print(df)
代码细节解释
df.groupby('OrderNum')['RevNum']:先按订单编号对数据分组,聚焦每组的修订编号列做后续计算。transform(lambda x: x == x.max()):transform方法会把分组计算的结果映射回原DataFrame的每一行,这里判断当前行的RevNum是否等于该订单组的最大修订号,得到一组布尔值。.map({True: 'Yes', False: 'No'}):把布尔值转换为更直观的"Yes"/"No"文本标记。
运行这段代码后,就能得到你想要的带最新修订标记的DataFrame了。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

