生成数据透视表

数据透视表可以按数据的值和列进行汇总统计。例如对多个数据列列连和进行求平均值。

a = pd.DataFrame([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [1, 3, 4, 5],
    [1, 2, 3, 2]
], columns=list("abcd"))
# 对数据生成透视表
print(a.pivot_table(values=["d"], index=["a", "b"], aggfunc=np.mean))

# Output:
#      d
# a b
# 1 2  3
#   3  5
# 5 6  8

同样的。数据透视表也可以将“长格式”的数据旋转为“宽格式”。例如将堆叠格式的时间数据转化为更加可读的表。

在这个例子中。a数据表被转化为以val_1, val_2 为列的dataframe. dataframe中分别是Index(["1992","1993", "1994", "1995"], name='year') 的行索引 和 Index(["a", "b"], name='type) 的列索引。

a = pd.DataFrame([
    ["1992", "a", 3, 4],
    ["1993", "b", 7, 8],
    ["1994", "a", 4, 5],
    ["1995", "a", 3, 2]
], columns=["year", "type", "val_1", "val_2"])
# 等价于 a.set_index(['year', 'type']).unstack('type')
b = a.pivot("year", "type") 
print(b) 
'''
     val_1      val_2
type     a    b     a    b
year
1992   3.0  NaN   4.0  NaN
1993   NaN  7.0   NaN  8.0
1994   4.0  NaN   5.0  NaN
1995   3.0  NaN   2.0  NaN
'''

塑造简单的数据关系

这个函数可以被用来塑造对数据的初始“感觉(概览)”,通俗地讲,就是我们可以验证一些基本假设。如在贷款案例中,“Credit_History”是否会影响个人贷款成功?这可以用交叉表(Crosstab)测试,如下所示:

简单来说就是以 Credit_History 和 Loan_Status 分别为纵轴和横轴, 可以看到 Credit_History=1 与 Loan_Status=Y 的比例为 79% . 反过来 Credit_History=0 与 Loan_Status=Y 的比例为 7.8%

Pandas 直接绘制盒形图和直方图

对数据进行聚类

对数据进行有效的聚类描述更加与意义

def binning(col, col_points, labels=None):
    minval = col.min()
    maxval = col.max()
    break_points = [minval] + col_points + [maxval]  # 合并成所有的分割点
    if not labels:
        labels = range(len(break_points) + 1)
    return pd.cut(col, bins=break_points, labels=labels, include_lowest=True)

a = pd.DataFrame([
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [1, 3, 4, 5],
    [1, 2, 3, 2]
], columns=list("abcd"))
# 对数据按 3, 5, 7 拆分
cut_points = [3, 5, 7]
labels = ['小于3', '大于3小于5', '大于5小于7', '大于7']
a["p"] = binning(a['d'], cut_points, labels)
print(a)
''' 
   a  b  c  d       p
0  1  2  3  4  大于3小于5
1  5  6  7  8     大于7
2  1  3  4  5  大于3小于5
3  1  2  3  2     小于3
'''