如何在多层groupby中划分熊猫中两个单独的df列的最大值?

虾青素

说我有以下df:

Account      Code      Revenue     Expenses
Account 1    123       6           10
Account 1    123       2           10
Account 1    345       1            6
Account 1    345       3            6
Account 1    345       2            6
Account 2    678       2           12
Account 2    678       1           12
Account 2    678       3           12
Account 2    890       1           2

如何获得最大收入(按代码和帐户分组)除以最大费用的一组重复值。因此,这将是所需的输出:

Account      Code      Revenue     Expenses   Ratio
Account 1    123       6           10         .6
Account 1    123       2           10         .6
Account 1    345       1            6         .5
Account 1    345       3            6         .5
Account 1    345       2            6         .5
Account 2    678       2           12         .25
Account 2    678       1           12         .25
Account 2    678       3           12         .25
Account 2    890       1           2          .5

我在想类似以下内容的方法,但这似乎不起作用:

max_df['Ratio'] = max_df.groupby(['Account']['Code'], sort=False)['Revenue'].max() / max_df.groupby(['Account']['Code'], sort=False)['Expenses'].max()

我收到一个指出的错误

TypeError: list indices must be integers or slices, not str
耶斯列尔

使用GroupBy.transformmean

max_df['Ratio'] = (max_df.groupby(['Account','Code'])['Revenue'].transform('max') / 
                   max_df.groupby(['Account', 'Code'])['Expenses'].transform('max'))
print (max_df)
     Account  Code  Revenue  Expenses  Ratio
0  Account 1   123        6        10   0.60
1  Account 1   123        2        10   0.60
2  Account 1   345        1         6   0.50
3  Account 1   345        3         6   0.50
4  Account 1   345        2         6   0.50
5  Account 2   678        2        12   0.25
6  Account 2   678        1        12   0.25
7  Account 2   678        3        12   0.25
8  Account 2   890        1         2   0.50

您可以避免groupby在列之后进行按列列表的double by处理groupby,然后可以DataFrame.eval用于除法

max_df['Ratio'] = (max_df.groupby(['Account','Code'])[['Revenue','Expenses']]
                         .transform('max')
                         .eval('Revenue / Expenses'))

...或创建助手DataFrame

df = max_df.groupby(['Account','Code'])[['Revenue','Expenses']].transform('max')
max_df['Ratio'] = df['Revenue'] / df['Expenses']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何汇总一列中两个单独列的最小值和最大值

如何基于单独的日期列划分同一列中的两个值

如何聚合熊猫中每组的两个最大值?

如何在MySQL中获取两个值的最大值?

如何在Postgres / SQL中获得两个整数的最小值/最大值?

如何从两个列表中删除与单独列表的重复值相对应的非最大值的索引?

如何在Excel中查找两个日期之间的最大值

如何在sql中找出两个不同条件下字段的最大值

如何比较两个不同的列并突出显示每行中的最大值?

如何从满足 DAX 中两个或多个 IF 条件的列中找到最大值

如何在Python中划分多层列

如何从共享两个公共列的一组行中选择一列中具有最大值的熊猫行?

如何在熊猫数据框中找到两个索引之间的最大值

如何在熊猫df中返回两个索引之间的值的均匀分布

突出显示熊猫df中列的最大值

在Python(Pandas / Numpy)中。如何创建两个独立系列的最大值/最小值的列?

如何在熊猫数据帧中的两列上得出最大值并在第三列上求和?

将两个不同表中的两列相乘后找到最大值-SQL

在Scala中获取两个相似列的最小值或最大值

熊猫Groupby中两个系列的最大和最小

删除R中两个向量的最大值

R中两个相等的最大值

比较两个差异熊猫数据框上两列的值并返回最大值

如何更改两列的最小值和最大值之间的两个随机数,从而在两列中更改空值?

如何获得 SQL Server 中两个值的最大值?

如何在熊猫数据框中按值组找到n个最大值的总和?

列表中两个切片的最小最大值/最大值

当对象为两个最大值时,显示数组中对象的最大值

我如何在PHP中划分两个语句