我有一个pandas数据帧
>>> df = pd.DataFrame()
>>> df['a'] = np.random.choice(range(0,100), 200)
>>> df['b'] = np.random.choice([0,1], 200)
>>> df.head()
a b
0 69 1
1 49 1
2 79 1
3 88 0
4 57 0
>>>
某些变量(在此示例中为'a'
)具有许多唯一值。
我想将'a'
替换为a2
,其中a2
有5个唯一值。换句话说,我想定义5个组并分配给a
组中的每个值。
例如a2=1
如果0<=df['a']<20
则a2=2
20<=df['a']<40
等等。
注意:
我使用了20
100/5 = 20
组
如何使用numpy
或pandas
或其他方式执行此操作?
编辑: 可能的解决方案
def group_array(a):
a = a - a.min()
a = 100 * a/a.max()
a = (a.apply(int)//20)+1
return a
答案 0 :(得分:2)
您可以使用pd.cut
对df['a']
中的值进行分类:
import pandas as pd
df = pd.DataFrame({'a':[69,49,79,88,57], 'b':[1,1,1,0,0]})
df['a2'] = pd.cut(df['a'], bins=range(0,101,20), labels=range(1,6), )
print(df)
产量
a b a2
0 69 1 4
1 49 1 3
2 79 1 4
3 88 0 5
4 57 0 3