【问题标题】:Best way to replicate SQL "update case when..." with Pandas?使用 Pandas 复制 SQL“更新案例时...”的最佳方法?
【发布时间】:2022-01-29 21:57:00
【问题描述】:

我有这个样本数据集

City
LAL
NYK
Dallas
Detroit
SF
Chicago
Denver
Phoenix
Toronto

我想要做的是用特定值更新某些值,其余部分我会保持原样。

所以,使用 SQL 我会做这样的事情:

update table1
set city = case 
when city='LAL' then 'Los Angeles'
when city='NYK' then 'New York'
Else city
end

在 Pandas 中最好的方法是什么?

【问题讨论】:

    标签: python pandas dataframe str-replace


    【解决方案1】:

    在城市列上使用replace

    df['City'] = df['City'].replace({"LAL": "Los Angeles", "NYK": "New York"})
    

    输出:

              City
    0  Los Angeles
    1     New York
    2       Dallas
    3      Detroit
    4           SF
    5      Chicago
    6       Denver
    7      Phoenix
    8      Toronto
    

    【讨论】:

    • 嘿@mozway,我可以问一个跟进,而不是打开一个新问题吗?所以,基本上是一样的,但是有多个in 条件。假设我想添加一个名为df[state]="ABC" 的新列,现在我想根据城市对其进行更新。所以像when city in ('Houston','Dallas') then 'Texas', when city in ('Los Angeles','San Francisco') then 'Cali' 这样,扩展问题:1.如何使用多个输入值? 2.如何根据其他列的值来做? 3.如何设置else值?
    • @botafogo 使用 map:df['State'] = df['City'].map({'Houston': 'Texas', 'Dallas': 'Texas', 'Los Angeles': 'California', 'San Francisco': 'California'})
    • 谢谢!如果可以的话,还有一个(对不起),如何将else 值设置为ABC 而不是NaN
    • 但是有没有办法使用多个输入参数?例如如果我有来自一个州的 20 个城市,你建议 'Houston': 'Texas', 'Dallas': 'Texas' 但是有没有可能做这样的事情 ('Houston', 'Dallas'): 'Texas' ,这样的事情可能吗?
    • 你可以先使用像d = {'State1': ['City1', 'City2'], ...}这样的字典,然后再使用{state: c for state, cities in d.items() for c in cities}进行修改
    【解决方案2】:

    你可以像这样直接替换值:

    replacement_dict = {"LAL": "Los Angeles", "NYK": "New York"}
    for key, value in replacement_dict.items():
        df['City'][df['City'] == key] = value
    

    【讨论】:

      【解决方案3】:

      您可以使用replace() 替换它。一种选择是定义字典。

      例子

      df = pd.DataFrame({'City':["LAL","NYK","Dallas","Detroit","SF","Chicago","Denver","Phoenix","Toronto"]})
      df.replace({"LAL": "Los Angeles", "NYK": "New York"})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 2021-11-10
        • 2019-10-30
        • 2017-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多