python - 计算 Pandas DataFrame 中每个 USIM 的网上商店订单中的平均商品

标签 python pandas dataframe logic

我有一个具有以下结构的 Pandas DataFrame:

import pandas as pd

data = {
    'USIM': ['1111111', '2199608', '2222222', '4444444', '1111111', '2111111', '2222222', '4444444'],
    'WEBSHOP_ORDER': [0, 0, 0, 0, 1, 1, 1, 1],
    'DEMAND_QTY': [1, 3, 2, 1, 5, 9, 8, 6]
}

df = pd.DataFrame(data)

我想计算每个 USIM 的网上商店订单中的平均商品数量。 USIM 列表示唯一标识符,WEBSHOP_ORDER 列表示每个条目的订单 ID,DEMAND_QTY 列表示每个订单中的商品数量。

我想获得以下输出:

USIM     AVG_ITEMS_IN_WEBSHOP_ORDER
0  1111111                   17.5  # (28+7)/2 *
1  2111111                   28.0
2  2199608                    7.0
3  2222222                   17.5
4  4444444                   17.5

# * 28 is the sum of WEBSHOP_ORDER == 1
#    7 is the sum of WEBSHOP_ORDER == 0

AVG_ITEMS_IN_WEBSHOP_ORDER 列表示每个唯一 USIM 值的网上商店订单中的平均商品数量。

有人可以帮我解决实现此目标的逻辑或代码吗?谢谢!

最佳答案

IIUC,你需要一个双 groupby 。一次计算对象的总和,一次计算每个 ID 的平均值:

out = (df.groupby('WEBSHOP_ORDER')['DEMAND_QTY'].transform('sum')
         .groupby(df['USIM']).mean()
         .reset_index(name='AVG_ITEMS_IN_WEBSHOP_ORDER')
      )

输出:

      USIM  AVG_ITEMS_IN_WEBSHOP_ORDER
0  1111111                        17.5
1  2111111                        28.0
2  2199608                         7.0
3  2222222                        17.5
4  4444444                        17.5

关于python - 计算 Pandas DataFrame 中每个 USIM 的网上商店订单中的平均商品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76472167/

相关文章:

python - 如何在拉取请求上创建问题评论?

python - 如何从Python-3的DataFrame中查找前N个最小值

python - 如何通过标点符号拆分 Pandas 列中的长字符串

Python Dataframe-如何对包含年、月、日数据的三个不同列进行分组,并从第四列计算总和

python - 计算 Pandas 中的独特广告展示次数

python - 如何从数据帧生成频率表?

python - 如何在 Python 中测试 Web API 限制

python - Scipy 的线性求和分配给出不正确的结果

python - python 中文件读取/查找的错误处理

python - 对 pandas 列执行条件操作