基于含分割值的列合并DataFrame并处理profit列分配问题
处理DataFrame explode后profit列的拆分或填充
方案1:按产品数量均分profit
先统计每一行拆分后的产品总数,再将profit按数量均分,让拆分后的每一行利润均等:
# 拆分products列并统计该行的产品总数 Merge_Store_Transaction['products'] = Merge_Store_Transaction['products'].str.split(';') Merge_Store_Transaction['product_count'] = Merge_Store_Transaction['products'].str.len() # 拆分产品列并计算均分后的利润 Merge_Store_Transaction = Merge_Store_Transaction.explode('products') Merge_Store_Transaction['profit'] = Merge_Store_Transaction['profit'] / Merge_Store_Transaction['product_count'] # 不需要统计列的话可以删除 Merge_Store_Transaction = Merge_Store_Transaction.drop('product_count', axis=1)
方案2:仅保留拆分后第一行的profit,其余行填0
如果只需要原行拆分后的第一个产品对应原有利润,其他产品利润设为0:
# 拆分products列并展开 Merge_Store_Transaction['products'] = Merge_Store_Transaction['products'].str.split(';') Merge_Store_Transaction = Merge_Store_Transaction.explode('products') # 按原行分组,给每个拆分后的行加组内序号 # 如果你有唯一交易ID(比如transaction_id),可以把level=0换成这个列名 Merge_Store_Transaction['row_order'] = Merge_Store_Transaction.groupby(level=0).cumcount() + 1 # 组内第一行保留原利润,其余设为0 Merge_Store_Transaction['profit'] = Merge_Store_Transaction.apply( lambda x: x['profit'] if x['row_order'] == 1 else 0, axis=1 ) # 不需要序号列的话可以删除 Merge_Store_Transaction = Merge_Store_Transaction.drop('row_order', axis=1)
内容的提问来源于stack exchange,提问作者Rocky
相关产品推荐
相关产品推荐

