如何在DataFrame中实现相邻行数值分组求和?
你的需求非常清晰,完全可以用Python自动实现,根本不用手动计算,我给你两种常见场景的解决方案,都是基于Pandas来处理的:
场景1:原DataFrame行数不变,每组两行显示同一个求和结果
这种情况适合你需要保留原数据行,同时每行标注所在两两组的求和值:
import pandas as pd # 先构造你的示例数据(替换成你实际的DataFrame即可) df = pd.DataFrame({ 'original_col': [0.00871, 0.001, 0.000603, 0.0123, 0.000871, 4.37e-05] }) # 给每行分配分组ID:每两行一组(0、0、1、1、2、2...) df['group_id'] = df.index // 2 # 按分组计算求和,并把结果填充到每组的所有行 df['pair_sum'] = df.groupby('group_id')['original_col'].transform('sum') # 可以删除临时的group_id列(如果不需要的话) df = df.drop('group_id', axis=1) print(df)
运行后输出的结果会是:
original_col pair_sum 0 0.008710 0.009710 1 0.001000 0.009710 2 0.000603 0.012903 3 0.012300 0.012903 4 0.000871 0.000915 5 0.000044 0.000915
场景2:只保留每组的求和结果,新DataFrame行数为原数的一半
如果你只需要每个两两组的求和值,不需要保留原数据行,可以这样做:
import pandas as pd df = pd.DataFrame({ 'original_col': [0.00871, 0.001, 0.000603, 0.0123, 0.000871, 4.37e-05] }) # 提取偶数位置和奇数位置的元素,对应配对 even_rows = df['original_col'].iloc[::2].reset_index(drop=True) odd_rows = df['original_col'].iloc[1::2].reset_index(drop=True) # 两两求和生成新列 sum_df = pd.DataFrame({'pair_sum': even_rows + odd_rows}) print(sum_df)
输出结果:
pair_sum 0 0.009710 1 0.012903 2 0.000915
处理原列长度为奇数的情况
如果你的原始数据行数是奇数(最后一个元素没有配对),可以稍微调整代码,比如把最后一个元素单独保留在结果中:
import pandas as pd df = pd.DataFrame({ 'original_col': [0.00871, 0.001, 0.000603, 0.0123, 0.000871] }) if len(df) % 2 != 0: # 提取最后一个单独的元素 last_single = pd.Series([df['original_col'].iloc[-1]]) # 取前面的偶数行和奇数行配对 even_rows = df['original_col'].iloc[:-1:2].reset_index(drop=True) odd_rows = df['original_col'].iloc[1:-1:2].reset_index(drop=True) sum_vals = even_rows + odd_rows # 合并求和结果和单独的元素 sum_df = pd.DataFrame({'pair_sum': pd.concat([sum_vals, last_single], ignore_index=True)}) else: even_rows = df['original_col'].iloc[::2].reset_index(drop=True) odd_rows = df['original_col'].iloc[1::2].reset_index(drop=True) sum_df = pd.DataFrame({'pair_sum': even_rows + odd_rows}) print(sum_df)
这样不管原数据是奇数还是偶数行,都能正常处理啦。
内容的提问来源于stack exchange,提问作者Regan
相关产品推荐
相关产品推荐

