繁体   English   中英

用非唯一标签切割的熊猫

[英]Pandas cut with non-unique labels

我正在尝试对数据进行 bin 处理并应用基于 bin 的浮点值。 我认为 pandas.cut 是用于此的工具,但显然它需要每个 bin 标签的唯一值。

values = [0.6, 0.5, 0.5, 0.6, 0.8, 0.9]
bins = [0, 2, 5, 10, 15, 25, 200]
binned = pd.cut(original_table[field], bins, labels=values)

>>> ValueError: Categorical categories must be unique

我的数据 (original_table) 非常大,迭代执行任何操作都很慢,这就是 cut 是一个吸引人的工具的原因。 有没有办法让 pd.cut 为此工作?

找到了解决方法:

values = [0.6, 0.5, 0.5, 0.6, 0.8, 0.9]
bins = [0, 2, 5, 10, 15, 25, 200]
binned = np.array(values)[pd.cut(original_table[field], bins, labels=False)]

这是我在此处找到的另一种规避此问题的选项。 貌似也快修复了

import pandas as pd
import numpy as np


values = [0.6, 0.5, 0.5, 0.6, 0.8, 0.9]
bins = [0, 2, 5, 10, 15, 25, 200]

# Cut it
binned = pd.cut(original_table[field], bins, labels=pd.Categorical(values))

演示:

In [127]: df = pd.DataFrame({'val':np.random.randint(0, 200, 10)})

In [128]: values = ['0.6', '0.5', '0.5X', '0.6X', '0.8', '0.9']
     ...: bins = [0, 2, 5, 10, 15, 25, 200]
     ...:

In [129]: df['new'] = pd.cut(df['val'], bins, labels=values).str.replace('X','').astype('float')

In [130]: df
Out[130]:
   val  new
0   25  0.8
1  115  0.9
2   63  0.9
3   29  0.9
4   74  0.9
5  133  0.9
6  194  0.9
7  152  0.9
8   94  0.9
9   84  0.9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM