一种基于多种过滤条件的Pandas数据框列中获取唯一值的Python方法

时间:2020-05-27 21:53:19

标签: python pandas

我正在尝试基于多个过滤条件来获取Pandas数据框中特定列的唯一值。这是一些玩具代码:

df = pd.DataFrame({'Manufacturer':['<null', 'Mercedes', 'BMW', 'Audi', 'Audi', 'Audi', 'Audi', 'Audi', 'Mercedes', 'BMW'],
                          'Color':['Purple', '<null>', '<null>', 'Blue', 'Green', 'Green', 'Black', 'White', 'Gold', 'Tan']})

我正在尝试获取Color列的唯一值的列表,假设:

a)在Color列中为非空值,并且

b)Manufacturer列中的值'Audi'

是否有Python方式不需要我通过获取数据帧的子集来“预处理”数据,例如:

df_1 = df[(df['Color'] != '<null>') & (df['Manufacturer'] == 'Audi')]
df_1['Color'].unique()

array(['Blue', 'Green', 'Black', 'White'], dtype=object)

谢谢!

1 个答案:

答案 0 :(得分:1)

您必须使用所需条件对数据框进行子集化。没有逃避。

您始终可以用1行代码编写代码,如下所示:

df[(df['Color'] != '<null>') & (df['Manufacturer'].eq('Audi'))]['Color'].unique()

此外,很高兴用null表示数据帧中的numpy.nan值。您的df将是这样:

In [86]: import numpy as np 
In [81]: df = pd.DataFrame({'Manufacturer':[np.nan, 'Mercedes', 'BMW', 'Audi', 'Audi', 'Audi', 'Audi', 'Audi', 'Mercedes', 'BMW'], 
    ...:                           'Color':['Purple', np.nan, np.nan, 'Blue', 'Green', 'Green', 'Black', 'White', 'Gold', 'Tan']})

然后,您可以使用df.notna()df.eq,它们更具Pythonic:

In [85]: df[df.Color.notna() & df.Manufacturer.eq('Audi')]['Color'].unique() 
Out[85]: array(['Blue', 'Green', 'Black', 'White'], dtype=object)

在OP发表评论后:

可以使用isin指定多个值:

df[(df['Color'] != '<null>') & (df['Manufacturer'].isin(['Audi', 'Mercedes']))]['Color'].unique()