我有很多顾客

CUST_ID | SEGMENT | AREA
  1     |  B      | CAD
  1     |  A      | RAM
  2     |  B      | CAD
  2     |  C      | RAM
  3     |  B      | RAM
  4     |  A      | RAM

我想数一数每SEGMENT人中CUST_ID人的唯一数字,所以我做了

df.groupby(['SEGMENT'])['CUST_ID'].nunique()

然而,如果有相同的CUST_ID个不同的SEGMENT类型,那么每SEGMENT个的数量就会inflating .我想 Select 最高值SEGMENT/CUST_ID,然后计数.A是最高的,C是最低的.因此产生的df看起来像:

CUST_ID | SEGMENT | AREA
  1     |  A      | RAM
  2     |  B      | CAD
  3     |  B      | RAM
  4     |  A      | RAM

而伯爵则是

  • A-2
  • B-2
  • C-0

我怎样才能做到这一点?

推荐答案

您可以try groupby CUST_ID column,然后通过获得SEGMENT column的min值来过滤行.

out = (df.groupby(['CUST_ID'])
       .apply(lambda g: g[g['SEGMENT'].eq(g['SEGMENT'].min())])
       .reset_index(drop=True))

注意:由于您希望 Select 每个客户ID的最高值段,然后进行计数,A为最高值,C为最低值,因此在ASCII talbe中,A为65,C为67.当比较时,A实际上比C小.这就是为什么这里使用min.

print(out)

   CUST_ID SEGMENT AREA
0        1       A  RAM
1        2       B  CAD
2        3       B  RAM
3        4       A  RAM
res = out.value_counts('SEGMENT')
print(res)

A    2
B    2
Name: SEGMENT, dtype: int64

Python相关问答推荐

如何在两列上groupBy,并使用pyspark计算每个分组列的平均总价值

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

Python—为什么我的代码返回一个TypeError

如何使用正则表达式修改toml文件中指定字段中的参数值

如何在验证文本列表时使正则表达式无序?

python3中np. divide(x,y)和x/y有什么区别?'

一维不匹配两个数组上的广义ufunc

EST格式的Azure数据库笔记本中的当前时间戳

#将多条一维曲线计算成其二维数组(图像)表示

将参数从另一个python脚本中传递给main(argv

如何在开始迭代自定义迭代器类时重置索引属性?

Pip:卸载`-e`安装过程中安装的所有pkgs

如何仅使用数据帧操作获得特定的唯一数据帧组合?

如何让doctest在mkdocs的标记代码块中运行示例?

给定Pandas 列DataFrame中的一个值,在其他DataFrame中 Select 与该值最接近的N行

如何在层之间添加任意函数?

在Python中比较函数参数和回调函数的正确方法

我如何沿着我的图表绘制一条线来显示哪里的数据密度最高?

如果没有强制转换Numy数组,则通过ctype将Numy数组传递给C函数会产生错误的结果

Shopware 6 REST-API产品更新不起作用