python - 将数据框中的列转换为 "classes"?

标签 python python-3.x pandas dataframe

所以我基本上得到了这个数据框:

,club_name,tr_begin,year,ranking
0,ADO Den Haag,1357,2010,6.0
1,ADO Den Haag,1480,2011,15.0
2,ADO Den Haag,1397,2012,9.0
3,ADO Den Haag,1384,2013,9.0
4,ADO Den Haag,1451,2014,13.0

我想做的是,我想遍历每个排名,并根据它的值(value)将它们归入一个类(class)。因此,排名 6 将进入第 2 类,排名 1 将进入第 1 类。转换表是这样的:

if ranking > 0 and ranking =< 3:
    rank_class = 1
if ranking > 3 and ranking =< 6:
    rank_class = 2 

etc etc etc

我希望在 18 岁之前以 3 的倍数发生。

所以我希望的输出是:

,club_name,tr_begin,year,ranking, ranking_class
0,ADO Den Haag,1357,2010,6.0, 2
1,ADO Den Haag,1480,2011,15.0, 5
2,ADO Den Haag,1397,2012,9.0, 3
3,ADO Den Haag,1384,2013,9.0, 3
4,ADO Den Haag,1451,2014,13.0, 5

我尝试使用掩码功能,并通过制作一个新的数据框然后合并,这有效但看起来非常草率。有一些简单的方法可以做到这一点吗?

提前致谢

最佳答案

使用 pandas.cut ,您可以为“垃圾箱”和“标签”定义可迭代对象。由于它们都可以使用 range 对象进行定义,这一点得到了简化。

我建议您先将ranking 系列转换为int;它可能会受到 floating-point rounding 的影响这可能会产生不良结果。

df = pd.read_csv('file.csv')

binrange = range(0, 19, 3)
labrange = range(1, 7)

df['ranking_class'] = pd.cut(df['ranking'], bins=binrange, labels=labrange)

print(df)

      club_name  tr_begin  year  ranking ranking_class
0  ADO Den Haag      1357  2010      6.0             2
1  ADO Den Haag      1480  2011     15.0             5
2  ADO Den Haag      1397  2012      9.0             3
3  ADO Den Haag      1384  2013      9.0             3
4  ADO Den Haag      1451  2014     13.0             5

关于python - 将数据框中的列转换为 "classes"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50657228/

相关文章:

Python字典值基于特定键合并

python - Python 中 Y 参数到 z 参数

python - sympy 中求解结果的数值

python - 按字符串值选择行的最优雅方式

python - 使用 pandas 将时间解析为时间戳

python - 如何在单独的数据帧之间合并和分组

python - 操作数无法与形状 (16,) (21,) -pandas 一起广播

python - 当子进程引发 CalledProcessError 异常时检查命令的返回码

python - django.db.utils.IntegrityError : column "color_set_id" contains null values

python - 连接数据框后对特定列进行排序