如何在DataFrame中生成指定条件下Revenue列求和的单行结果?
需求场景
执行代码 df= df.loc[df['Week_Date'] == '2342',['Week_Date','Revenue']] 后,得到如下多行DataFrame:
| Week_Date | Revenue |
|---|---|
| 2342 | 7.0 |
| 2342 | 8.0 |
| 2342 | 6.0 |
| 2342 | 9.0 |
| 2342 | 9.0 |
| 2342 | 4.0 |
| 2342 | 8.0 |
| 2342 | 4.0 |
尝试执行 df= df.loc[df['Week_Date'] == '2342',['Week_Date','Revenue']].sum() 仅返回求和数值55,期望生成如下单行DataFrame:
| Week_Date | Revenue |
|---|---|
| 2342 | 55.0 |
解决方案
方法1:分组求和(推荐)
通过groupby按Week_Date分组后对Revenue求和,直接得到目标格式:
df = df.loc[df['Week_Date'] == '2342', ['Week_Date', 'Revenue']].groupby('Week_Date').sum().reset_index()
groupby('Week_Date'):以Week_Date为分组依据.sum():对每组的Revenue字段求和.reset_index():将分组字段从索引转回普通列,保持原数据结构
方法2:手动构造DataFrame
先筛选目标数据并计算总和,再手动生成单行DataFrame:
# 筛选目标行 filtered_df = df.loc[df['Week_Date'] == '2342', ['Week_Date', 'Revenue']] # 计算Revenue总和 total_revenue = filtered_df['Revenue'].sum() # 构造目标DataFrame df = pd.DataFrame({'Week_Date': ['2342'], 'Revenue': [total_revenue]})
方法3:自定义聚合
通过agg指定各列的聚合规则,生成单行结果:
df = df.loc[df['Week_Date'] == '2342', ['Week_Date', 'Revenue']].agg({ 'Week_Date': 'first', # 取第一个值(所有值都是2342) 'Revenue': 'sum' # 求和 }).to_frame().T.reset_index(drop=True)
.agg():为不同列设置不同聚合逻辑.to_frame().T:将聚合得到的Series转为DataFrame并转置为行结构.reset_index(drop=True):移除自动生成的索引列
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

