二级索引下的二维表降维实例

第一次写博客,不足之处很多,希望大家多多包含~

问题引入:

对如下所示的表格进行可视化时,需要提前对数据的形式进行预处理,以下为原数据形式:

显然这种形式不太行,因为笔者想把这些"用来表示时间的列名"单独设置为时间维度,从而在可视化BI软件可以方便的使用筛选等时间序列特有的功能。因此,在导入之前就要先把这种二维表格的数据进行降维,通过类别内的笛卡尔积,降维成一条条记录式的普通一维表。

最后解决的思路:

先进行一个简单的填充:(对于各个空格,引用前一行的数据进行填充)

data = data.fillna(method='pad',axis=0)

效果如下:

然后利用stack函数进行聚合:

data_temp = data.copy()
data_temp = data_temp.set_index(["指标","商品"]).stack()
data_temp = data_temp.reset_index()
data_temp.columns = ["指标",'商品','时间','销售件数']
data_temp

可以看到,指标按照类别都做了笛卡尔积,并且变成一条条记录的样式。

问题得以解决!

补充:stack()函数的作用是“堆叠”,可以将表格的横向列旋转到行,在二级指标的存在下,需要提前指定set_index后的列表,然后再进行stack(),否则会出现很多大类的笛卡尔积nan值,而不是各个有效的小分类内的笛卡尔积了。

# 附录:一个提取各级目录的代码块:

first_list = list(set(data["指标"]))
index_list = [[] for i in range(len(first_list))]   # 创建一个列数等于first_list的空数组
for i in range(len(first_list)):
    temp_table = data[data["指标"] == first_list[i]]
    temp_list = list(set(temp_table["商品"]))
    index_list[i].append(first_list[i])
    index_list[i].append(temp_list)      # index_list存放着所有的分类,其中index_list[i][0]都是一级分类:“指标”的名字, 这个序列后面的元素则是index_list[i][0]这一大分类下的二级分类:“商品”

print(index_list)

第一次写博客,作为CSDN多年的使用者,从CSDN上的许多大佬帖子上学到了很多,于是想把自己生活中遇到的点滴小问题和大家分享,真心希望可以对大家有所帮助!

猜你喜欢

转载自blog.csdn.net/weixin_46970693/article/details/126352643