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

如何为Pandas DataFrame添加列展示分组内行间层级过渡?

嘿,这个需求用Pandas的分组+移位操作就能轻松实现,我给你拆解具体步骤和代码:

解决方案

核心思路是:按Name分组后,获取每组内上一行的Level值,再通过条件判断生成对应的层级变化文本。

完整可运行代码

import pandas as pd
import numpy as np

# 先构造你给出的原始DataFrame
df = pd.DataFrame(columns=['Name','Level'])
df['Name'] = ['Ahmed','Ahmed','Ahmed','Ahmed','Beth','Beth','Beth','Beth','Carlos','Carlos','Carlos','Carlos']
df['Level'] =['a','b','c','d','a','b','c','d','a','b','c','d']

# 第一步:按Name分组,获取每组内上一行的Level值(第一行会得到NaN)
df['prev_level'] = df.groupby('Name')['Level'].shift(1)

# 第二步:生成预期结果列
df['Expected Result'] = np.where(
    df['prev_level'].isna(),  # 判断是否是每组的第一行
    df['Level'],  # 第一行直接用当前Level
    df['prev_level'] + ' to ' + df['Level']  # 其他行拼接前后层级
)

# 可选:删掉临时的prev_level列,让数据更整洁
df = df.drop(columns=['prev_level'])

# 查看结果
print(df)

关键代码解释

  • groupby('Name')['Level'].shift(1):这一步是对每个用户分组后,把Level列向下“挪”一行,这样每组的第一条记录会得到NaN(因为没有上一行),后面的记录就能拿到上一行的层级值。
  • np.where():这是个实用的条件赋值函数,帮我们区分每组的第一行和其他行:第一行直接保留当前层级,其他行则把上一层级和当前层级用to连接起来。

运行后你就能得到完全符合预期的Expected Result列啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:45:52