pandas数据重塑
程序员文章站
2024-02-28 19:25:04
...
《Python for Data Analysis》
数据重塑
重塑层次化索引
stack
: 将数据的列“旋转”为行
unstack
: 将数据的行“旋转”为列
旋转
pivot
:
前两个参数值分别用作行和列索引的列名,最后一个参数则是用于填充DataFrame的数据列的列名。如果忽略最后一个参数,得到的DataFrame就会带有层次化的列。
相当于用set_index
创建层次化索引,再用unstack
重塑。
见 : > 使用DataFrame的列
数据离散化和面板划分cut
为了便于分析,将连续数据离散化、拆分为“面元”(bin)
In [4]: ages = [20,22,25,27,21,23,37,31,61,45,41,32]
In [5]: bins = [18,25,35,60,100]
In [6]: cats = pd.cut(ages,bins)
In [7]: cats
Out[7]:
[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]]
Length: 12
Categories (4, object): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]
In [12]: cats.codes
Out[12]: array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int8)
In [13]: cats.categories
Out[13]: Index([u'(18, 25]', u'(25, 35]', u'(35, 60]', u'(60, 100]'], dtype='object')
In [14]: pd.value_counts(cats)
Out[14]:
(18, 25] 5
(35, 60] 3
(25, 35] 3
(60, 100] 1
dtype: int64
In [15]: cats.value_counts()
Out[15]:
(18, 25] 5
(25, 35] 3
(35, 60] 3
(60, 100] 1
dtype: int64
排列和随机采样
numpy.random.permutation
: 随机重排序
In [18]: df = DataFrame(np.arange(5*4).reshape(5,4))
In [19]: df
Out[19]:
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
In [20]: sampler = np.random.permutation(5)
In [21]: sampler
Out[21]: array([1, 4, 0, 2, 3])
In [22]: df.take(sampler)
Out[22]:
0 1 2 3
1 4 5 6 7
4 16 17 18 19
0 0 1 2 3
2 8 9 10 11
3 12 13 14 15
In [23]: df.ix(sampler)
Out[23]: <pandas.core.indexing._IXIndexer at 0x76c5358>