Python 如何在Pandas中的两列上使用聚合函数,而不会弄乱索引?
我遇到了这样一个问题,即使用agg(['sum','count'])输出的是“子列”,而不是新的独占列 这是一个问题,因为我需要将结果导出到csv以供salesforce上载,而子列正在弄乱格式 首先是这个数据帧:Python 如何在Pandas中的两列上使用聚合函数,而不会弄乱索引?,python,pandas,csv,dataframe,export-to-csv,Python,Pandas,Csv,Dataframe,Export To Csv,我遇到了这样一个问题,即使用agg(['sum','count'])输出的是“子列”,而不是新的独占列 这是一个问题,因为我需要将结果导出到csv以供salesforce上载,而子列正在弄乱格式 首先是这个数据帧: Order ID | Company ID | Company Name | Product | Date | Units in order | Units delivered | Platform 1 J01 John's
Order ID | Company ID | Company Name | Product | Date | Units in order | Units delivered | Platform
1 J01 John's Bubblegum 01-01-20 100 100 On Prem
2 J01 John's Bubblegum 01-01-20 200 150 On Prem
3 M01 Mary's Jawbreakers 01-01-20 100 100 Online
然后,我从中创建一个子集DF
Subset = df[['Company ID', 'Company Name', 'Platform', 'Date', 'Units in order', 'Units delivered']]
然后我继续分组并在子集上应用聚合,以获得units列和计数的总和(以了解下了多少订单)
但是,这会弄乱列的索引。而不是输出
Company ID | Company Name | Platform | Date | Sum of UIO | Count of UIO | Sum of UD | Count of UD
Company ID | Company Name | Platform | Date | Sum of UIO | Units in order | Units delivered |
sum | count sum | count
它正在输出
Company ID | Company Name | Platform | Date | Sum of UIO | Count of UIO | Sum of UD | Count of UD
Company ID | Company Name | Platform | Date | Sum of UIO | Units in order | Units delivered |
sum | count sum | count
有效地创建了4个“子列”。当然,当导出到CSV时,这会创建一种“格式”,除pandas之外的任何人都无法正确读取该格式
这个问题如何解决?为什么会发生?起初我认为这是因为有命名冲突,因为我有2个sum和2个count列,但我试图重命名它们,但没有解决问题。您可以使用pandas
namedagh
解决这个问题,因为pandas 0.25.0
和python 3.5.0
如果没有弄错的话,它是可用的。守则如下:
Subset = Subset.groupby(['Company ID', 'Company Name', 'Platform', 'Date']).agg(
Units_in_order_sum = pd.NamedAgg(column='Units in order', aggfunc='sum'),
Units_in_order_count = pd.NamedAgg(column='Units in order', aggfunc='count'),
Units_delivered_sum = pd.NamedAgg(column='Units delivered',aggfunc='sum'),
Units_delivered_count = pd.NamedAgg(column='Units delivered',aggfunc='count')).reset_index()
这被称为多级索引。。。也许这会让你在谷歌上找到一个真正的答案。我想你可以完全省略
pd.namedagh
?pandas理解别名:可能类似于…agg(Units\u in\u order\u sum=('Units in order','sum'))
。:)