Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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中Groupby函数在多列计算中的应用_Python_Pandas_Pandas Groupby - Fatal编程技术网

python中Groupby函数在多列计算中的应用

python中Groupby函数在多列计算中的应用,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我试图在python中使用groupby根据两列ID和DATE(MM/DD/YY)划分INPUT_DF,然后对分组行执行数学运算 分组行的数学函数为:EXPOSURE*VALUE。对于分组的ID和DATE可能存在多个风险敞口,在这种情况下,应该是SUM(风险敞口*值) 输入_DF: ID PRODUCT EXPOSURE DATE(MM/DD/YY) VALUE STA A 0.5 1/31/03 3 STA A 0.5 8/29/03 4 MP B 0.6 8/29/0

我试图在python中使用
groupby
根据两列
ID
DATE(MM/DD/YY)
划分
INPUT_DF
,然后对分组行执行数学运算

分组行的数学函数为:
EXPOSURE*VALUE
。对于分组的
ID
DATE
可能存在多个风险敞口,在这种情况下,应该是
SUM(风险敞口*值)

输入_DF:

ID  PRODUCT EXPOSURE    DATE(MM/DD/YY)  VALUE
STA A   0.5 1/31/03 3
STA A   0.5 8/29/03 4
MP  B   0.6 8/29/03 5
MP  B   0.5 5/31/05 6
ZT  B   0.3 5/31/05 7
ZT  B   0.5 5/31/05 8
STA A   0.6 1/31/03 1
STA A   0.7 8/29/03 2
MP  B   0.8 8/29/03 3
MP  B   0.2 5/31/05 4
ZT  B   0.5 5/31/05 5
ZT  B   0.2 6/31/05 6
输出_DF:

ID  DATE    FINAL_VALUE
STA 1/31/03 2.1
STA 8/29/03 3.4
MP  8/29/03 5.4
MP  5/31/05 3.8
ZT  5/31/05 8.6
ZT  6/31/05 1.2
代码:

我确实试着做了以下几点

OUTPUT_DF  = INPUT_DF[['ID','DATE(MM/DD/YY)']].groupby('ID', 'DATE(MM/DD/YY)')['EXPOSURE']*['VALUE'].sum()
但这给了我一个错误。有人能帮我解决这个问题吗

这里有一种方法:

OUTPUT_DF = (INPUT_DF.groupby(['ID', 'DATE(MM/DD/YY)'])
             .apply(lambda x: sum(x.EXPOSURE * x.VALUE)))


ID   DATE(MM/DD/YY)
MP   5/31/05           3.8
     8/29/03           5.4
STA  1/31/03           2.1
     8/29/03           3.4
ZT   5/31/05           8.6
     6/31/05           1.2
要以您发布的格式将其作为数据帧,只需将
添加到_frame
重置_index

OUTPUT_DF = (INPUT_DF.groupby(['ID', 'DATE(MM/DD/YY)'])
             .apply(lambda x: sum(x.EXPOSURE * x.VALUE))
             .to_frame('FINAL_VALUE')
             .reset_index())

>>> OUTPUT_DF
    ID DATE(MM/DD/YY)  FINAL_VALUE
0   MP        5/31/05          3.8
1   MP        8/29/03          5.4
2  STA        1/31/03          2.1
3  STA        8/29/03          3.4
4   ZT        5/31/05          8.6
5   ZT        6/31/05          1.2

在应用
groupby
之前,先计算sumproduct列,然后简单地计算总和:

input_df['FINAL_VALUE'] = input_df['VALUE'] * input_df['EXPOSURE']

output_df = input_df.groupby(['ID', 'DATE(MM/DD/YY)'])['FINAL_VALUE'].sum()

print(output_df)
这张照片是:

ID   DATE(MM/DD/YY)
MP   5/31/05           3.8
     8/29/03           5.4
STA  1/31/03           2.1
     8/29/03           3.4
ZT   5/31/05           8.6
     6/31/05           1.2

您可以发布您得到的确切错误是什么吗?对于初学者,您需要以列表的形式传递列
.groupby('ID','DATE(MM/DD/YY)
应该是
.groupby('ID','DATE(MM/DD/YY)])
df.groupby([“ID”,“DATE”])。应用(lambda x:sum(x[“VALUE”]*x[“EXPOSURE”])
谢谢你的回答。我怎样才能得到所有缺失日期的ID。我对问题中所示的
输出
感兴趣。不客气!请看我的编辑,我认为这会解决问题。使用
。apply
时要小心,因为它在较大的数据集上运行非常慢。@asongtoruin,这是绝对正确的。