【问题标题】:Python pandas dataframe slicing, with if conditionPython pandas数据帧切片,带有if条件
【发布时间】:2013-09-13 15:39:29
【问题描述】:

我有一个 DataFrame 对象,有多个列:business_idcategoriestype_of_business...

我已经设法通过在原始 DataFrame 对象上的列索引创建了一个只有 business_idcategories 的较小 DataFrame。

categories 是特定字符串的列表。例如:['Restaurant, 'food', 'bakery'] - 对应每个business_id

其中一个类别是Restaurants。我将如何仅检索类别列表中包含单词 Restaurants 的那些企业 ID。

伪代码:

for row in smaller_DataFrame:
    if 'Restaurants' in row['categories']:
        add this business_id to some dictionary.

我对如何将 if 条件合并到 DataFrame 对象中感兴趣。

提前致谢。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    根据布尔条件选择行在文档中称为屏蔽

    df[df['categories'].isin(['Restaurant', 'food', 'bakery'])]
    

    顺便说一句,我看到你被否决了。最好包含一些 DataFrame 示例行和所需结果的示例。

    要使其不区分大小写,请将.str.lowercase() 放在.isin 之前,并将类别列表全部小写。

    【讨论】:

    • 我认为他的categories 列包含列表,而不是单个值。
    • 是的,不管是什么他都会有答案的:)
    • 否,类别是字符串列表,因为每一行都包含字符串类别列表。我认为@DanAllan 误解了我?对困惑感到抱歉。以后我会更加详细。
    【解决方案2】:

    你可以用地图做到这一点:

    df[df.categories.map(lambda cats: 'Restaurants' in cats)]
    

    【讨论】:

    • 我以前使用过这种 lambda 表达式形式,但我完全忘记了它。感谢维克托的帮助。
    猜你喜欢
    • 2016-03-23
    • 2013-04-17
    • 2019-07-22
    • 2017-01-16
    • 2018-01-30
    • 2021-08-19
    • 1970-01-01
    • 2022-12-23
    • 1970-01-01
    相关资源
    最近更新 更多