如何为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
相关产品推荐
相关产品推荐

