首页 > 解决方案 > 根据条件计算系列的唯一值 - Pandas

问题描述

我有一个这样的数据框。

预订编号 预订类别 车号
1 X 美国广播公司
2 X 定义
3 是的 美国广播公司
4 是的
5 z
6 z
7 z 美国广播公司
8 z 美国广播公司
9 X 定义
10 X

我需要获取仅在“x”类别中完成预订的车辆编号的唯一计数。例如,在此数据框中,“def”是唯一在“x”类别中完成预订的车辆编号。所以计数将是 1。我不想运行一个循环,因为它会花费很多时间。

标签: pythonpandasdataframe

解决方案


创建一个频率表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']

推荐阅读