pandas中多列不同行数值相加及min/max/count聚合运算问题求助
pandas跨行聚合操作实现方案
1. 求和需求实现
你需要用到pandas的shift方法实现跨行取值:Series.shift(-1)会将整列数据向上移动1行,原最后一行的位置会自动填充空值,刚好匹配你2003年无下一年A列数据的计算规则。
示例代码如下:
# 提取下一行的A列值,最后一行对应值为空 next_row_A = df['A'].shift(-1) # 计算当前行C、D + 下一行A的和 df['sum'] = df['C'] + df['D'] + next_row_A
2. 最小/最大/计数等聚合需求实现
如果需要对「当前行C、当前行D、下一行A」三个值做聚合,只需要先把三个序列拼接为临时DataFrame,再按行执行聚合操作即可,和你熟悉的单列聚合逻辑一致:
import pandas as pd # 提取三个参与计算的列 col_c = df['C'] col_d = df['D'] next_col_a = df['A'].shift(-1) # 拼接为临时DataFrame,按行对齐 temp_df = pd.concat([col_c, col_d, next_col_a], axis=1) # 取三个值的最小值 df['min_val'] = temp_df.min(axis=1) # 取三个值的最大值 df['max_val'] = temp_df.max(axis=1) # 统计三个值中非空值的数量 df['notnull_count'] = temp_df.count(axis=1) # 示例:统计三个值中大于0的数量 df['pos_count'] = temp_df.gt(0).sum(axis=1)
注意事项
执行上述代码前请确保你的DataFrame已经按年份升序排序,否则shift方法获取的不是下一年的对应值,排序代码参考:
# 替换为你实际的年份列名 df = df.sort_values('year').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Naru
相关产品推荐
相关产品推荐

