【问题标题】:Sum of the column values if the rows meet the conditions如果行满足条件,则列值的总和
【发布时间】: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


    【解决方案1】:

    如果将总和放在最后,则您的解决方案有效:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 2017-01-13
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多