我有一个具有以下 struct 的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在网上store 订单中的平均项目数.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值在网上store 订单中的平均项目数.

有没有人能帮我讲讲实现这一点的逻辑或代码?谢谢!

推荐答案

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相关问答推荐

Tokenizer Docker:无法为Tokenizer构建轮子,这是安装pyproject.toml项目所需的

Pandas数据帧处理Pandas表中Json内的嵌套列表以获取后续Numpy数组

"如果发生特定错误,返回值

如何在矩阵上并行化简单循环?

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

剧作家Python没有得到回应

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

如何在Python中使用io.BytesIO写入现有缓冲区?

当密钥是复合且唯一时,Pandas合并抱怨标签不唯一

Polars比较了两个预设-有没有方法在第一次不匹配时立即失败

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

按列分区,按另一列排序

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

用砂箱开发Web统计分析

如何在Python中获取`Genericums`超级类型?

旋转多边形而不改变内部空间关系

使用BeautifulSoup抓取所有链接

Geopandas未返回正确的缓冲区(单位:米)

python sklearn ValueError:使用序列设置数组元素