You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pandas DataFrame分组顶部值替换指定列数据

问题解决:按组替换Pandas DataFrame列值

需求说明

现有一个Pandas DataFrame,数据按空行分为多组:

  • 每组首行的product列存储支付类型(如credit、cash、transfer)
  • 组内后续行的purchase列需要替换为该组首行的支付类型

输入示例

productpurchaseprice
credit
toycash£20
electronicscash£50
groceriescash£80
gamingcash£30
cash
toycredit£20
electronicscredit£50
groceriescredit£80
gamingcredit£30
transfer
toycash£20
electronicscash£50
groceriescash£80
gamingcash£30

输出示例

productpurchaseprice
credit
toycredit£20
electronicscredit£50
groceriescredit£80
gamingcredit£30
cash
toycash£20
electronicscash£50
groceriescash£80
gamingcash£30
transfer
toytransfer£20
electronicstransfer£50
groceriestransfer£80
gamingtransfer£30

解决方案代码

import pandas as pd

# 创建示例DataFrame(实际场景可替换为读取你的数据源)
df = pd.DataFrame({
    'product': ['credit', 'toy', 'electronics', 'groceries', 'gaming', '', 'cash', 'toy', 'electronics', 'groceries', 'gaming', '', 'transfer', 'toy', 'electronics', 'groceries', 'gaming'],
    'purchase': ['', 'cash', 'cash', 'cash', 'cash', '', '', 'credit', 'credit', 'credit', 'credit', '', '', 'cash', 'cash', 'cash', 'cash'],
    'price': ['', '£20', '£50', '£80', '£30', '', '', '£20', '£50', '£80', '£30', '', '', '£20', '£50', '£80', '£30']
})

# 1. 生成分组ID:以空行为分隔标记各组
df['group_id'] = df['product'].eq('').cumsum()

# 2. 提取每组对应的支付类型(每组首行的product值)
payment_types = df[df['purchase'].eq('')]['product'].tolist()
payment_map = dict(zip(df['group_id'].unique(), payment_types))

# 3. 替换purchase列:仅替换非首行的内容
df['purchase'] = df.apply(
    lambda row: payment_map[row['group_id']] if row['purchase'] != '' else row['purchase'],
    axis=1
)

# 4. 删除临时分组列
df = df.drop('group_id', axis=1)

# 查看结果
print(df)

代码逻辑解释

  1. 标记分组:通过判断product列是否为空字符串,累加生成唯一的组ID,把空行作为分组的分隔点。
  2. 建立支付类型映射:筛选出每组首行(purchase为空的行)的product值,将组ID和对应支付类型关联成字典。
  3. 替换目标列:遍历每行,若当前行的purchase不为空,就用对应组的支付类型替换;首行保持原空值不变。
  4. 清理临时数据:移除用于分组的group_id列,得到最终结果。

内容的提问来源于stack exchange,提问作者user19795989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:48:16