问题描述
我一直在琢磨一个想法,即在工作中建立一个自动执行月末报告的程序。目前,它以Excel格式为我们创建所有报告,然后我们手动使用Excel的小计功能对其列进行小计并将数据格式化为表格。
我的想法是按客户对每一列进行小计,如下所示:
病人 | 日期 | 接收# | 说明 | 数量 | 价格 |
---|---|---|---|---|---|
例子,约翰 | 2/1/2021 | 357649 | 阿司匹林 | 30 | 6.99 |
例子,约翰 | 2/1/2021 | 357650 | 药物 | 30 | 13.99 |
例子,约翰 | 2/1/2021 | 357651 | 泰诺 | 30 | 7.99 |
示例,约翰小计 | 28.97 | ||||
例子,苏珊 | 2/12/2021 | 357652 | 昂贵的药物 | 30 | 51.99 |
例子,苏珊 | 2/12/2021 | 357653 | 药物 | 30 | 13.99 |
例子,苏珊 | 2/12/2021 | 357654 | 泰诺 | 30 | 7.99 |
示例,苏珊小计 | 73.97 |
现有的数据框看起来像:
病人 | 日期 | 接收# | 说明 | 数量 | 价格 |
---|---|---|---|---|---|
例子,约翰 | 2/1/2021 | 357649 | 阿司匹林 | 30 | 6.99 |
例子,约翰 | 2/1/2021 | 357650 | 药物 | 30 | 13.99 |
例子,约翰 | 2/1/2021 | 357651 | 泰诺 | 30 | 7.99 |
例子,苏珊 | 2/12/2021 | 357652 | 昂贵的药物 | 30 | 51.99 |
例子,苏珊 | 2/12/2021 | 357653 | 药物 | 30 | 13.99 |
例子,苏珊 | 2/12/2021 | 357654 | 泰诺 | 30 | 7.99 |
这可以通过 groupby() 实现吗?它似乎可以选择按行而不是按列分组。我看到的更大的问题是插入现有的数据帧,因为 Pandas 似乎更适合在大型数据集上操作/执行操作,而不是插入/添加信息。
解决方法
# Calculate sums
df_subtotal = df.groupby('Patient',as_index=False)[['Price']].agg('sum')
# Manipulate string Patient
df_subtotal['Patient'] = df_subtotal['Patient'] + ' subtotal'
# Join dataframes
df_new = pd.concat([df,df_subtotal],axis=0,ignore_index=True)
# Sort
df_new = df_new.sort_values(['Patient','Date'])