我正在尝试存储数据并根据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适用于此?
答案 0 :(得分:1)
演示:
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
答案 1 :(得分:1)
找到了解决方法:
values = [0.6, 0.5, 0.5, 0.6, 0.8, 0.9]
bins = [0, 2, 5, 10, 15, 25, 200]
binned = np.array(bins)[pd.cut(original_table[field], bins, labels=False)]
答案 2 :(得分:1)
这是规避此问题的另一种方法,我发现here。看起来也很快会解决
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))