python在分组数据帧时跨多个列获取最大值和最小值
此查询与和相关 我试图从分组数据中的两列创建最小值和最大值 我有一个这样的数据集python在分组数据帧时跨多个列获取最大值和最小值,python,pandas,aggregation,Python,Pandas,Aggregation,此查询与和相关 我试图从分组数据中的两列创建最小值和最大值 我有一个这样的数据集 measure measure_group route year actual budget AC electrification A 20182019 103 99 AC electrification A 20192020 110 122 AC
measure measure_group route year actual budget
AC electrification A 20182019 103 99
AC electrification A 20192020 110 122
AC electrification B 20182019 9 10
AC electrification B 20192020 55 50
HV electrification A 20182019 2 10
HV electrification A 20192020 7 15
HV electrification B 20182019 67 10
HV electrification B 20192020 100 115
cat 1 track A 20182019 10 15
cat 1 track A 20192020 111 25
cat 1 track B 20182019 55 16
cat 1 track B 20192020 75 175
cat 2 track A 20182019 84 5
cat 2 track A 20192020 125 1005
cat 2 track B 20182019 7 4
cat 2 track B 20192020 15 25
我想要的是每种度量、度量单位组、路线等组合的[实际、预算]的最小值和最大值作为新列
measure measure_group route year actual budget min max
AC electrification A 20182019 103 99 99 122
AC electrification A 20192020 110 122 99 122
AC electrification B 20182019 9 10 9 55
AC electrification B 20192020 55 50 9 55
HV electrification A 20182019 2 10 2 15
HV electrification A 20192020 7 15 2 15
HV electrification B 20182019 67 10 10 115
HV electrification B 20192020 100 115 10 115
cat 1 track A 20182019 10 15 10 111
cat 1 track A 20192020 111 25 10 111
cat 1 track B 20182019 55 16 16 175
cat 1 track B 20192020 75 175 16 175
cat 2 track A 20182019 84 5 5 1005
cat 2 track A 20192020 125 1005 5 1005
cat 2 track B 20182019 7 4 4 25
cat 2 track B 20192020 15 25 4 25
我尝试了df.groupbydf_remaped['min']=df_remaped.groupby(['Measure','Measure_group','route'])[['Actual','Budget']]]的各种组合。transform('min')
,但这会返回一个值错误:传递的项数错误2,placement暗示1
我有一种感觉,我试图将两列返回到一个新列中
我确实考虑过生成一个独立的数据文件,然后使用普通索引上的连接重新加入到原来的数据文件中,但是这感觉像是冗长的处理……/P>
如能提供任何可能的方法,我们将不胜感激。奇怪的是,聚合的大多数例子只针对单列。 您可以<代码>熔体数据框,以便在计算MIN或Max时考虑“实际”或“预算”。然后将熔化的数据框分组并合并。
id_vars = ['measure', 'measure_group', 'route']
df1 = (df.melt(id_vars=id_vars, value_vars=['actual', 'budget'])
.groupby(id_vars)['value']
.agg(['min', 'max']))
df = df.merge(df1, how='left', on=id_vars)
transform
在这里是可能的,但它确实适合于单个列的单个聚合。在这里,您需要跨多个列进行聚合,并且需要两个聚合(最小值、最大值),因此这会变得非常麻烦。它可以用transform来完成,但它不是这个工作的合适工具。我喜欢使用链式赋值使代码更紧凑,同时保持可读性。非常感谢
measure measure_group route year actual budget min max
0 AC electrification A 20182019 103 99 99 122
1 AC electrification A 20192020 110 122 99 122
2 AC electrification B 20182019 9 10 9 55
3 AC electrification B 20192020 55 50 9 55
4 HV electrification A 20182019 2 10 2 15
5 HV electrification A 20192020 7 15 2 15
6 HV electrification B 20182019 67 10 10 115
7 HV electrification B 20192020 100 115 10 115
8 cat1 track A 20182019 10 15 10 111
9 cat1 track A 20192020 111 25 10 111
10 cat1 track B 20182019 55 16 16 175
11 cat1 track B 20192020 75 175 16 175
12 cat2 track A 20182019 84 5 5 1005
13 cat2 track A 20192020 125 1005 5 1005
14 cat2 track B 20182019 7 4 4 25
15 cat2 track B 20192020 15 25 4 25