【问题标题】:Convert column's data to enumerated dictionary key-value将列的数据转换为枚举字典键值
【发布时间】:2016-09-27 17:02:16
【问题描述】:

是否有更好的方法(在最小代码的意义上)可以执行以下操作:将列转换为枚举数值,所以它应该有点这样:

  1. 在列中获取一组
  2. 制作带有键值的枚举字典
  3. 用值还原键
  4. 使用键值结果代替新列中的数据。

这就是我今天要做的事情,想知道是否有人可以展示一个经典的方法来做到这一点,这样我就可以避免编写函数get_color_val

import pandas as pd  
cars = pd.DataFrame({"car_name": ["BMW","BMW","ACCURA","ACCURA","ACCURA","BMW","BMW","BMW"],"color":["RED","RED","RED","RED","GREEN","BLACK","BLUE","BLUE"]})

color_dict = dict(enumerate(set(cars["color"])))
color_dict = dict((y,x) for x,y in color_dict.iteritems())

def get_color_val(row):
    my_key = row["color"]
    my_value = color_dict.get(my_key)
    return my_value

cars["color_val"] = cars.apply(get_color_val, axis=1)
cars = cars.drop("color",1)
print cars

结果

Before------------
car_name  color
0      BMW    RED
1      BMW    RED
2   ACCURA    RED
3   ACCURA    RED
4   ACCURA  GREEN
5      BMW  BLACK
6      BMW   BLUE
7      BMW   BLUE


After------------
car_name  color_val
0      BMW          3
1      BMW          3
2   ACCURA          3
3   ACCURA          3
4   ACCURA          2
5      BMW          1
6      BMW          0
7      BMW          0

【问题讨论】:

    标签: python pandas dictionary dataframe enumeration


    【解决方案1】:

    在这种情况下我会使用pd.factorize()

    In [8]: cars['color_val'] = pd.factorize(cars.color)[0]
    
    In [9]: cars
    Out[9]:
      car_name  color  color_val
    0      BMW    RED          0
    1      BMW    RED          0
    2   ACCURA    RED          0
    3   ACCURA    RED          0
    4   ACCURA  GREEN          1
    5      BMW  BLACK          2
    6      BMW   BLUE          3
    7      BMW   BLUE          3
    

    【讨论】:

    • @adhg,是的,又一个喜欢 Pandas 的理由...... ;)
    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多