Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Pandas中的两列上使用聚合函数,而不会弄乱索引?_Python_Pandas_Csv_Dataframe_Export To Csv - Fatal编程技术网

Python 如何在Pandas中的两列上使用聚合函数,而不会弄乱索引?

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

我遇到了这样一个问题,即使用agg(['sum','count'])输出的是“子列”,而不是新的独占列

这是一个问题,因为我需要将结果导出到csv以供salesforce上载,而子列正在弄乱格式

首先是这个数据帧:

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'))
。:)