Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x 使用.agg(lambda)而不是.apply(lambda)重写groupby_Python 3.x_Pandas_Numpy_Lambda_Group By - Fatal编程技术网

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'))