【问题标题】:if statement/conditions to check a dataframe column for a string in Pythonif 语句/条件检查 Python 中的字符串的数据框列
【发布时间】:2022-01-23 03:09:27
【问题描述】:

我有一列,其中包含“都柏林 2”、“都柏林 4”等文字。我需要检查多达 24 个都柏林。

我想做这样的事情:

if df["Postcode"] == "Dublin 2":
    df["Popularity"] == 10
        
elif df["Postcode"] == "Dublin 3":
    df["Popularity"] == 3

我已经尝试使用条件和 np.select,它可以工作,但对于我拥有的都柏林的数量来说这是不可行的。

conditions = [

    df['Dublin Postcode'].str.contains('Dublin 1'),
    df['Dublin Postcode'].str.contains('Dublin 2'),
    
    ]

values = [10,3]

df['Popularity'] = np.select(conditions, values, default=5) 

有没有更聪明的方法让它工作?在这个阶段我看不到树木的树木!

【问题讨论】:

  • 我不知道为什么我的代码格式不正确。我希望任何阅读此内容的人都能理解它!
  • 我已经编辑了你的代码块。您可以通过单击我的名字上方的edited xxx ago 来查看我所做的更改(选择“并排降价”)。您也可以选择您的代码并在编辑器中按{} 符号。
  • 最多 24 个都柏林。但在这个问题中,我没有看到其他流行度值。它们是随机的还是包含模式
  • 我没有包括其他的人气值,实际值并不重要
  • 那么理想情况下,这个问题的最早答案已经在回答它了。你可以接受它或评论它。

标签: python dataframe if-statement conditional-statements


【解决方案1】:

您可以创建一个从字符串到人口的字典,例如:

d = {'Dublin 2': 10,...}

那么你可以像这样使用applay:

df["Popularity"] = df["Postcode"].apply(lambda x: d[x])

【讨论】:

    【解决方案2】:

    我觉得你可以用apply:

    import pandas as pd
    
    postcode_to_popularity = {"Dublin 2": 10, "Dublin 3": 3} # add your other mappings here
    df = pd.DataFrame({"Postcode": ["Dublin 2", "Dublin 3", "Unknwown", "Dublin 2"]}) # here you use your own dataframe
    df["Popularity"] = df["Postcode"].apply(lambda postcode: postcode_to_popularity.get(postcode))
    print(df)
    

    这会给你这个:

       Postcode  Popularity
    0  Dublin 2        10.0
    1  Dublin 3         3.0
    2  Unknwown         NaN
    3  Dublin 2        10.0
    

    我希望这能回答你的问题!

    【讨论】:

    • 谢谢,这两种解决方案似乎都有效。
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2013-10-03
    • 2013-03-12
    • 2017-10-25
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多