我有一個資料框子資料:
PageId VolumePred ConversionPred OSBrowser
1005581 8.0 7.0 (11, 16)
1016529 175.0 85.0 (11, 16)
1016529 4.0 4.0 (11, 17)
1016529 4.0 4.0 (12, 14)
1016529 29.0 19.0 (12, 16)
對于每個 OSBrowser,我只選擇“VolumePred”的累積值小于 44 的“PageId”。
這里是正常作業的代碼:
h = subdata.groupby(["PageId", "OSBrowser"]).sum().reset_index().sort_values(["OSBrowser","ConversionPred"],ascending=[True,False])
output = h[h.groupby("OSBrowser")["VolumePred"].transform("cumsum").lt(44)].reset_index(drop=True)
但現在我想將 44 值更改為(每個“OSBrowser”的 VolumePred 總和)的 50%
例如,子資料的預期輸出是一個空資料框,因為對于 (11, 16) OSBrowser:兩條記錄的 (11, 16) 大于 (0.5* (175 8)).. 其他行也是如此
請問有什么想法嗎?謝謝
uj5u.com熱心網友回復:
還是這樣?
h = subdata.groupby(["PageId", "OSBrowser"]).sum()\
.reset_index()\
.sort_values(['OSBrowser','ConversionPred'],ascending=[True,False])
h['VolumePred_total'] = h.groupby("OSBrowser")["VolumePred"].transform("sum")
output = h[h.groupby("OSBrowser")["VolumePred"].transform("cumsum").lt(h['VolumePred_total']*0.5)].reset_index(drop=True)
uj5u.com熱心網友回復:
h = subdata.groupby(["PageId", "OSBrowser"]).sum()\
.reset_index()\
.sort_values(['OSBrowser','ConversionPred'],ascending=[True,False])
VolumePred_total = h.groupby('OSBrowser').sum()["VolumePred"].rename('VolumePred_total')
h1 = h.merge(VolumePred_total,on='OSBrowser')
output = h1[h1.groupby("OSBrowser")["VolumePred"].transform("cumsum")\
.lt(h1["VolumePred_total"]*0.5)].reset_index(drop=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/442231.html
標籤:Python python-3.x 熊猫 数据框
