说我有以下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.transform
有mean
:
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] 删除。
我来说两句