【问题标题】:How do I index an pandas dataframe using boolean indexing?如何使用布尔索引索引熊猫数据框?
【发布时间】:2020-05-04 10:11:11
【问题描述】:

我正在 pandas 中开始一个新的练习模块,我们处理数据的索引和过滤。我遇到了一种在课程中没有解释的方法链接格式,我想知道是否有人可以帮助我理解这一点。该数据集来自财富 500 强公司列表。

df = pd.read_csv('f500.csv', index_col = 0)

问题是我们被教导通过像这样将布尔条件传递给数据框来使用布尔索引;

motor_bool = df["industry"] == "Motor Vehicles and Parts"
motor_countries = df.loc[motor_bool, "country"]

上面的代码是查找以“汽车及零部件”为行业的国家。模块中的最后一个练习要求我们

“创建一个系列,industry_usa,其中包含总部位于美国的公司的行业列中两个最常见值的计数。”

答案代码是

industry_usa = f500["industry"][f500["country"] == "USA"].value_counts().head(2)

我不明白我们怎么会突然背靠背使用 df[col]df[col]?我不应该先通过 bool 条件,然后指定我想使用 .loc 将其分配给哪一列吗?链接使用的方法与我们实践的方法非常不同。

请帮忙。我真的很困惑。

一如既往,谢谢你,堆栈社区。​​p>

【问题讨论】:

    标签: python pandas dataframe boolean-indexing


    【解决方案1】:

    我认为最后一个解决方案不是recommended,这里更好的是使用DataFrame.loc,就像第二个解决方案一样,通过掩码获取列industry,然后获取计数:

    industry_usa = f500.loc[f500["country"] == "USA", "industry"].value_counts().head(2)
    

    Series.nlargest 的另一种解决方案:

    industry_usa = f500.loc[f500["country"] == "USA", "industry"].nlargest(2)
    

    【讨论】:

    • 非常感谢。它工作得很好。也感谢你一直帮助我学习 python。我从你们的 cmets 身上学到了很多东西。你是熊猫大师!
    • 由于某种原因,当我使用另一个面具尝试相同的事情时,它不起作用? ``` boul = df['previous_rank'].isnull() df.loc[df['previous_rank'].isnull()] ``` 上面的代码只返回列标签。空白数据框
    • @Oscar Agbor 难题,DataFrame 一样吗?或者可能没有丢失的数据?或者有字符串NaN,所以需要df.loc[df['previous_rank'] == 'NaN']
    • 是的,它是同一个 DataFrame。有些行有缺失值。 ``` df.isnull().sum() ```
    • @Oscar Agbor 你能否测试df['previous_rank'].isnull().sum()previous_rank 列中是否缺少值?因为如果使用 ``` df.isnull().sum() ``` 它会测试所有列,所以previous_rank 列中可能没有缺失值
    猜你喜欢
    • 2021-03-19
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-10
    • 2018-01-13
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多