大熊猫分组时间序列

时间:2015-04-11 11:16:51

标签: python numpy pandas

我有一个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']<20a2=2 20<=df['a']<40等等。

注意: 我使用了20

的大小100/5 = 20

如何使用numpypandas或其他方式执行此操作?

编辑: 可能的解决方案

def group_array(a):
    a = a - a.min()
    a = 100 * a/a.max()
    a = (a.apply(int)//20)+1
    return a 

1 个答案:

答案 0 :(得分:2)

您可以使用pd.cutdf['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