随机重排序
import pandas as pd
import numpy as np
from pandas import Series
df = pd.DataFrame(np.arange(5*4).reshape(5,4))
df
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19
shuffle 的参数只能是 array_like,而 permutation 除了 array_like 还可以是 int 类型,如果是 int 类型,那就随机打乱 numpy.arange(int)。
sampler = np.random.permutation(5)
sampler
array([1, 2, 0, 4, 3])
shuffle 返回 None,这点尤其要注意,也就是说没有返回值,而 permutation 则返回打乱后的 array。
list1 = [1,2,3,4,5]
result = np.random.shuffle(list1)
list1
[2, 5, 4, 1, 3]
df.take(sampler)
0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
0 0 1 2 3
4 16 17 18 19
# 随机采样,取前三行
df.take(np.random.permutation(len(df))[:3])
0 1 2 3
4 16 17 18 19
2 8 9 10 11
3 12 13 14 15
计算指标/哑变量
将分类变量转换为哑变量矩阵或指标矩阵,如果DataFrame的某一列中含有K个不同的值,
则可以派生出一个K列矩阵或DataFrame(其值全为1和0)
df = pd.DataFrame({'key':['b','b','a','c','a','b'],
'data1':range(6)
})
df
key data1
0 b 0
1 b 1
2 a 2
3 c 3
4 a 4
5 b 5
# 给列加上前缀,get_dummies的prefix参数可以实现该功能
dummies = pd.get_dummies(df['key'],prefix='qianzui')
dummies
qianzui_a qianzui_b qianzui_c
0 0 1 0
1 0 1 0
2 1 0 0
3 0 0 1
4 1 0 0
5 0 1 0
# Series对象是没有join方法的,必须是dataframe
df[['data1']].join(dummies)
data1 qianzui_a qianzui_b qianzui_c
0 0 0 1 0
1 1 0 1 0
2 2 1 0 0
3 3 0 0 1
4 4 1 0 0
5 5 0 1 0