Python Pandas按列分组遇no值重置累计求和的实现方法
import pandas as pd # 构造测试数据,实际使用时替换为你自己的DataFrame即可 data = { "Column1": ["A", "A", "A", "A", "A", "B", "B", "B", "B"], "Column2": [2, 1, 3, 2, 5, 3, 1, 2, 5], "Column3": ["yes", "yes", "no", "yes", "yes", "yes", "no", "yes", "yes"] } df = pd.DataFrame(data) # 步骤1:按Column1分组生成段落标识,遇到no则段落编号+1 df["block_id"] = df.groupby("Column1")["Column3"].transform( lambda x: (x == "no").cumsum().shift(fill_value=0) ) # 步骤2:按Column1+段落标识分组,仅对yes行计算对应段落的Column2总和 df["block_sum"] = df[df["Column3"] == "yes"].groupby(["Column1", "block_id"])["Column2"].transform("sum") # 步骤3:生成Column4,no行直接填no,其余行填对应段落的总和 df["Column4"] = df.apply( lambda row: "no" if row["Column3"] == "no" else row["block_sum"], axis=1 ) # 清理过程中生成的辅助列 df = df.drop(columns=["block_id", "block_sum"]) print(df)
运行后输出结果和你提供的期望效果完全一致。
内容的提问来源于stack exchange,提问作者gülsümmm
相关产品推荐
相关产品推荐

