python中Groupby函数在多列计算中的应用
我试图在python中使用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
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,这是绝对正确的。