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

求助:使用Pandas实现DataFrame分组内连续行差值计算

解决方案

针对你的需求,我们可以通过Pandas的groupby、sort_values和diff方法来实现,具体步骤如下:

1. 准备初始数据

首先创建你的初始DataFrame:

import pandas as pd

# 初始化数据
df = pd.DataFrame({
    'col1': ['a', 'b', 'a', 'a', 'b', 'a', 'b', 'b'],
    'col2': [50, 40, 40, 30, 20, 20, 30, 50]
})

2. 分组并排序

按col1分组,每组内按col2降序排列:

# 分组后每组内按col2降序排序,group_keys=False避免保留分组键作为索引
df_sorted = df.groupby('col1', group_keys=False).apply(lambda x: x.sort_values('col2', ascending=False)).reset_index(drop=True)

3. 计算每组内连续行的差值

使用diff(-1)计算当前行与下一行的差值(因为是降序排列,当前行值大于下一行,差值为正):

# 按col1分组计算差值,diff(-1)表示当前行减下一行
df_sorted['diff'] = df_sorted.groupby('col1')['col2'].diff(-1)

4. 生成自定义标识列col_entity

根据每组内的排序序号生成标识,比如a组的第一行是a1,第二行是a2,以此类推:

# 每组内累计计数(从0开始)加1,拼接col1得到标识
df_sorted['col_entity'] = df_sorted['col1'] + (df_sorted.groupby('col1').cumcount() + 1).astype(str)

最终结果

此时df_sorted的输出为:

col1 col_entity  col2  diff
0    a         a1    50  10.0
1    a         a2    40  10.0
2    a         a3    30  10.0
3    a         a4    20   NaN
4    b         b1    50  10.0
5    b         b2    40  10.0
6    b         b3    30  10.0
7    b         b4    20   NaN

关于你提供的预期结果的说明

你给出的预期结果中行顺序似乎是打乱的(比如b组的行穿插在a组中),如果需要保持原DataFrame的行顺序,同时为每行计算其在组内排序后的差值,可以采用以下方式:

# 为每组生成排序后的差值映射
def get_diff_mapping(group):
    # 组内降序排序并计算差值
    sorted_group = group.sort_values('col2', ascending=False)
    sorted_group['diff'] = sorted_group['col2'].diff(-1)
    # 创建col2到diff的映射(注意如果有重复col2值,会取最后一个的diff,可根据需求调整)
    return sorted_group.set_index('col2')['diff']

# 为每行匹配对应的diff
df['diff'] = df.apply(lambda row: get_diff_mapping(df[df['col1'] == row['col1']]).get(row['col2']), axis=1)

# 生成col_entity(这里按原行顺序,每组内的序号基于col2降序的位置)
df['col_entity'] = df.groupby('col1').apply(lambda x: x['col2'].rank(ascending=False, method='dense')).astype(int).astype(str)
df['col_entity'] = df['col1'] + df['col_entity']

这样处理后,原行顺序的DataFrame会得到对应的diff和col_entity,不过需要注意重复col2值的情况,可根据实际需求调整rank的method参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:07:35