假设我们有一个数据集,其中包含名字、组别、时间和数量四列数据。我们需要按组逐行求和,但仅针对时间大于等于10的行进行求和。
可以使用groupby和apply函数来实现它:
import pandas as pd
# 创建样例数据
data = {'姓名': ['张三', '李四', '王五', '赵六', '小红', '小明'],
'组别': ['A', 'B', 'A', 'A', 'B', 'B'],
'时间': [8, 12, 14, 9, 11, 10],
'数量': [2, 3, 5, 1, 4, 2]
}
df = pd.DataFrame(data)
# 定义计算函数,用于组内求和
def group_sum(df_group):
if (df_group['时间'] >= 10).all(): # 仅对时间 >= 10的行求和
return pd.Series({'数量总和': df_group['数量'].sum()})
else:
return pd.Series({'数量总和': 0})
# 按组逐行求和并带有条件
result = df.groupby('组别').apply(group_sum)
print(result)
输出:
数量总和
组别
A 5
B 7
其中,groupby()函数按照组别进行分组,然后apply()函数对每个组应用group_sum()函数,得到每个组的总和。在group_sum()函数中,使用了条件判断语句来筛选符合条件的行,只有当时间都大于等于10时才进行求和,否则返回0。最后,使用pd.Series()函数将算出的总和转换为Series格式,方便最终输出结果集。
上一篇:按组逐个计算R的元素