Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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_Dataframe_Pandas Groupby - Fatal编程技术网

Python Pandas:在同一函数调用中组合聚合列和未聚合列

Python Pandas:在同一函数调用中组合聚合列和未聚合列,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个DataFrame,其中有两列将在groupby(GroupBy1和GroupBy2)中使用,有几十列将使用agg()进行度量(MesA:Max、MesB:Min、MesC:sum…),其他列不用于度量,但用于诸如groupby中最后一行的日期时间、“GroupName1”、“GroupName2”、另一个数据库的GroupId等信息,等等 TicketsDBFrame GroupBy1 GroupBy2 GroupName1 GroupName2 MesA MesB MesC MesD

我有一个DataFrame,其中有两列将在groupby(GroupBy1和GroupBy2)中使用,有几十列将使用agg()进行度量(MesA:Max、MesB:Min、MesC:sum…),其他列不用于度量,但用于诸如groupby中最后一行的日期时间、“GroupName1”、“GroupName2”、另一个数据库的GroupId等信息,等等

TicketsDBFrame
GroupBy1 GroupBy2 GroupName1 GroupName2 MesA MesB MesC MesD LastTicketTime       GroupId1 GroupId2
1        1        First      First      2    3    1    6    2021-04-05 01:00:00  4        99
1        1        First      First      4    1    3    2    2021-04-05 02:00:00  4        99
1        1        First      First      2    5    2    1    2021-04-05 03:00:00  4        99
1        2        First      Second     2    5    2    1    2021-04-05 01:30:00  4        75
1        2        First      Second     1    4    7    3    2021-04-05 02:30:00  4        75
2        2        Second     Second     4    2    1    8    2021-04-05 02:00:00  2        75
2        2        Second     Second     1    6    3    1    2021-04-05 04:00:00  2        75
所需输出:

GroupBy1 GroupBy2 GroupName1 GroupName2 MesA MesB MesC MesD LastTicketTime       GroupId1 GroupId2
1        1        First      First      4    1    6    9    2021-04-05 03:00:00  4        99
1        2        First      Second     2    4    4    2    2021-04-05 02:30:00  4        75
2        2        Second     Second     4    2    4    9    2021-04-05 04:00:00  2        75
我已经知道如何使用派生数据帧创建此所需的帧,使用'loc'和'idxmax'获取帧中的LastTicketTime,其他派生帧获取'Ids and Names',另一个DataFrame调用度量列的agg(),然后在帧中进行合并

groupInfoFrame:将GroupBy1-GroupName1-GroupId1关联起来创建的小派生框架

lastTicketFrame:仅包含LastTicketTime的帧

lastTicketFrame=TicketsDBFrame[['GroupBy1','GroupBy2','LastTicketTime' ]]
lastTicketFrame=lastTicketFrame.loc[lastTicketFrame.groupby(['GroupBy1'],['GroupBy2]).LastTicketTime.idxmax() ]
度量框架:仅度量

measuresFrame = TicketsDBFrame.groupby(['GroupBy1'],['GroupBy2]).agg( mesA:.....MesD )
毕竟,我在MeasureName和lastTicketFrame中使用GroupBy1和GroupBy2作为键进行合并


是否可以在一个agg()或transform()或其他函数调用中包含所有这些信息?没有派生帧和合并

您可以在单个
agg
中执行该操作(通过按
lastticketime
对值进行排序,并在
agg
中取
last
):

输出:

   GroupBy1  GroupBy2 GroupName1 GroupName2  MesA  MesB  MesC  MesD  \
0         1         1      First      First     4     1     6     9   
1         1         2      First     Second     2     4     9     4   
2         2         2     Second     Second     4     2     4     9   

        LastTicketTime  GroupId1  GroupId2  
0  2021-04-05 03:00:00         4        99  
1  2021-04-05 02:30:00         4        75  
2  2021-04-05 04:00:00         2        75

另外,如果我没有弄错的话,GroupName1=First,GroupName2=Second的预期输出似乎有问题:
MesC
MesD
是总和,应该分别是9和4(而不是4和2)。

非常感谢您,perl。这比我以前做的容易多了
   GroupBy1  GroupBy2 GroupName1 GroupName2  MesA  MesB  MesC  MesD  \
0         1         1      First      First     4     1     6     9   
1         1         2      First     Second     2     4     9     4   
2         2         2     Second     Second     4     2     4     9   

        LastTicketTime  GroupId1  GroupId2  
0  2021-04-05 03:00:00         4        99  
1  2021-04-05 02:30:00         4        75  
2  2021-04-05 04:00:00         2        75