我正在嘗試根據地理坐標計算同一社區中商店的銷售額總和。我有樣本資料:
data={'ID':['1','2','3','4'],'SALE':[100,120,110,95],'X':[23,22,21,24],'Y':[44,45,41,46],'X_MIN':[22,21,20,23],'Y_MIN':[43,44,40,45],'X_MAX':[24,23,22,25],'Y_MAX':[45,46,42,47]}
| ID | 銷售 | X | 是 | X_MIN | Y_MIN | X_MAX | Y_MAX |
|---|---|---|---|---|---|---|---|
| 1 | 100 | 23 | 44 | 22 | 43 | 24 | 45 |
| 2 | 120 | 22 | 45 | 21 | 44 | 23 | 46 |
| 3 | 110 | 21 | 41 | 20 | 40 | 22 | 42 |
| 4 | 95 | 24 | 46 | 23 | 45 | 25 | 47 |
X 和 Y 是商店的坐標。X 和 Y 與 MIN 和 MAX 是它們覆寫的區域。對于每一行,我想對單個商店邊界內的所有商店的銷售額求和。我希望結果類似于下表,其中 ID 1 的 SUM 等于 220,因為坐標(X 和 Y)在 ID 1 和 ID 2 的該商店的 MIN 和 MAX 限制內,而對于 ID 4,只有這一個商店介于他的坐標,所以銷售額的總和等于 95。
final={'ID':['1','2','3','4'],'SUM':[220,220,110,95]}
| ID | 和 |
|---|---|
| 1 | 220 |
| 2 | 220 |
| 3 | 110 |
| 4 | 95 |
我試過的:
data['SUM'] = data.apply(lambda x: data['SALE'].sum(data[(data['X'] >= x['X_MIN'])&(data['X'] <= x['X_MAX'])&(data['Y'] >= x['Y_MIN'])&(data['Y'] <= x['Y_MAX'])]),axis=1)
不幸的是,代碼不起作用,我收到以下錯誤:
TypeError:不可散列的型別:'DataFrame'
我正在尋求幫助來解決這個問題。
uj5u.com熱心網友回復:
如果將總和放在最后,則您的解決方案有效:
data['SUM'] = data.apply(lambda x: (data['SALE'][(data['X'] >= x['X_MIN'])&(data['X'] <= x['X_MAX'])&(data['Y'] >= x['Y_MIN'])&(data['Y'] <= x['Y_MAX'])]).sum(),axis=1)
###output of data['SUM']:
###0 220
###1 220
###2 110
###3 95
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/511134.html
上一篇:變數在for回圈中未正確分配
