python - 根据条件计算系列的唯一值 - Pandas
问题描述
我有一个这样的数据框。
预订编号 | 预订类别 | 车号 |
---|---|---|
1 | X | 美国广播公司 |
2 | X | 定义 |
3 | 是的 | 美国广播公司 |
4 | 是的 | 吉 |
5 | z | 吉 |
6 | z | 吉 |
7 | z | 美国广播公司 |
8 | z | 美国广播公司 |
9 | X | 定义 |
10 | X | 吉 |
我需要获取仅在“x”类别中完成预订的车辆编号的唯一计数。例如,在此数据框中,“def”是唯一在“x”类别中完成预订的车辆编号。所以计数将是 1。我不想运行一个循环,因为它会花费很多时间。
解决方案
创建一个频率表crosstab
,然后检查计数以确保只有x
类别的计数大于0
s = pd.crosstab(df['vehicle_number'], df['booking_category'])
m = s.pop('x').ge(1) & s.eq(0).all(1)
细节
>>> s
booking_category x y z
vehicle_number
abc 1 1 2
def 2 0 0
ghi 1 1 2
>>> m
vehicle_number
abc False
def True
ghi False
dtype: bool
结果
>>> m.sum()
1
>>> list(m[m].index)
['def']
推荐阅读
- asp.net-core - 将 ASP.NET Core webapp 部署到 Raspberry Pi 以托管致命错误
- javascript - 蚂蚁设计resetFields()不清除输入
- c# - 使用 LINQ 的 GroupBy 和计数
- amazon-web-services - AWS EC2 - Amazon Linux AMI 之间有什么区别
- docker - 自动启动多个现有依赖容器的最佳方法是什么?
- java - Android v1p1beta1 语音 - java.lang.NoSuchMethodError: 没有静态方法 decodeBase64
- c# - 如何使用默认客户端用户代理 C# .NET 4.0 发出 HTTP 请求?
- python - 列表和列表列表的乘法
- create-react-app - 如何删除 create-react-app 的 package.json 主页中的最后一个 /
- excel - 运行时错误“3061”。参数太少。预计 3