Python 3.x 使用.agg(lambda)而不是.apply(lambda)重写groupby
是否可以根据Python 3.x 使用.agg(lambda)而不是.apply(lambda)重写groupby,python-3.x,pandas,numpy,lambda,group-by,Python 3.x,Pandas,Numpy,Lambda,Group By,是否可以根据.agg重新编写下面的表达式 我有 sampleGC.groupby(['prime_broker_id', 'country_name'], as_index=False).apply( lambda df, a, b: sum(df[a] * df[b]),'carry_rate', 'notional_current') 哪个输出 prime_broker_id country_name CITI AUSTRALIA 4.929853e+
.agg
重新编写下面的表达式
我有
sampleGC.groupby(['prime_broker_id', 'country_name'], as_index=False).apply( lambda df, a, b: sum(df[a] * df[b]),'carry_rate', 'notional_current')
哪个输出
prime_broker_id country_name
CITI AUSTRALIA 4.929853e+10
HONG KONG 2.565716e+11
INDONESIA 3.508484e+09
JAPAN 9.608675e+11
MALAYSIA 9.459922e+10
NEW ZEALAND 2.479546e+08
我想将其改写为:
sampleGC.groupby(['prime_broker_id', 'country_name'], as_index=False).agg(
{"": lambda }
如何通过按照.agg
重新编写groupby来获得相同的输出(如上所示)?
我更喜欢这种格式,因为我可以很容易地重命名列并添加其他操作,如求和和和平均值
非常感谢我相信您将能够通过以下方式完成此操作(在数据框中添加一个计算列):
如果仅针对列名,则可以使用
**kwargs
定义您所需的列名
函数和应用(您所需的列名)
。不仅针对列名使用.agg无法进行多列计算。Agg将对一列数据执行聚合操作。如果您需要使用两列或更多列,则必须使用agg以外的其他内容,如apply。感谢Scott,了解这一点很有帮助。是否可以在.apply()中包含多个lambda以便我可以执行不同的操作?比如:.apply(“column\u name1:lambda,column\u name2:lambda….”)我怎么做呢?你可以做一些像df.groupby('key')['col1','col2']].agg({'col1':'sum','col2':'mean'})
。你不能使用多个lambda,但是,你可以继续定义你自己的lambda,这样做。df groupby('key')['col1','col2'].agg({'col1':f1,'col2':f2})
。注意,您可以使用agg,因为它们是单列聚合。是的,我考虑过这一点,但当您有多个操作要执行时,效率不是很高……您想要什么类型的效率?执行性能?
sampleGC['calculated'] = sampleGC['carry_rate'] * sampleGC['notional_current']
res = sampleGC.groupby(['prime_broker_id', 'country_name'], as_index=False).apply(lambda gb: gb['calculated'].agg('sum'))