欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>