【问题标题】:Replace multiple values in Pandas column without loop在没有循环的情况下替换 Pandas 列中的多个值
【发布时间】:2019-02-08 10:40:31
【问题描述】:

我有 Pandas 数据框,想在 df 的特定列上替换很多值。

如何在没有循环的情况下实现下面的代码?

for i in range(len(data.loc[:, 'CityID'])):
    if data.loc[:, 'CityID'][i] == 1:
        data.loc[:, 'CityID'][i] = 1
    elif data.loc[:, 'CityID'][i] in (2, 3, 4, 21):
        data.loc[:, 'CityID'][i] = 2
    elif data.loc[:, 'CityID'][i] in (33, 34):
        data.loc[:, 'CityID'][i] = 4
    else:
        data.loc[:, 'CityID'][i] = 3

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    您可以使用带有pd.Series.map 的字典:

    d = {1: 1, 2: 2, 3: 2, 4: 2, 21: 2, 33: 4, 34: 4}
    
    data['CityID'] = data['CityID'].map(d).fillna(3)
    

    如果觉得字典构建比较费力,可以使用解包:

    d = {1: 1, **dict.fromkeys((2, 3, 4, 21), 2), **dict.fromkeys((33, 34), 4}
    

    【讨论】:

      【解决方案2】:

      用途:

      m1 = data['CityID'] == 1
      m2 = data['CityID'].isin([2, 3, 4, 21])
      m3 = data['CityID'].isin([33, 34])
      
      data['CityID'] = np.select([m1, m2, m3], [1,2,4], default=3)
      

      【讨论】:

        猜你喜欢
        • 2021-10-22
        • 1970-01-01
        • 2015-11-05
        • 2012-06-27
        • 2022-01-03
        • 1970-01-01
        • 2015-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多