【发布时间】:2022-10-07 19:22:44
【问题描述】:
我正在尝试根据地理坐标计算同一社区中商店的销售额总和。我有样本数据:
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]}
| SALE | Y | Y_MIN | Y_MAX |
|---|---|---|---|
| 100 | 44 | 43 | 45 |
| 120 | 45 | 44 | 46 |
| 110 | 41 | 40 | 42 |
| 95 | 46 | 45 | 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]}
| SUM |
|---|
| 220 |
| 220 |
| 110 |
| 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\'
我正在寻求帮助来解决这个问题。
标签: python dataframe loops if-statement lambda