问题
我的手头有35万条数据,包含三个属性:时间、数量和ID。我现在需要以时间、ID分类,对数量进行求和统计(分类汇总);然后以time列为行(x轴),ID为列(y轴),num为值建立矩阵。
读取数据如下:
我们可以利用groupby函数进行分类汇总
以time,id为key进行分类,然后对num进行求和统计;得到的是Series数据
df1=df.groupby(["time","Id"])["num"].sum()
Series数据有两层索引,第一层为time,第二层为id,可以根据两者定位数据
可以利用stack和unstack将数据旋转成我们需要的格式
stack()即“堆叠”,作用是将列旋转到行
unstack()即stack()的反操作,将行旋转到列
两者默认都是对最里层索引处理,也就id层旋转。但是我们可以传入参数制定旋转的索引
df1=df1.unstack(1)#对最里层旋转
df1=df1.unstack(0)#对最外层旋转
当然也可以对DataFrame数据进行旋转,就变回了Series数据
代码
import pandas as pd
df = pd.read_csv("data.csv",encoding='utf8',dtype={"num": int})
df1=df.groupby(["time","Id"])["num"].sum()
df1=df1.unstack()
df1=df1.fillna(0).astype(int)
df1.to_csv("矩阵.csv",index = False)
欢迎关注本人的公众号:燕南路GISer ,专注GIS干货分享,不定期更新。
提问求资源等都可在公众号后台留言
后期CSDN的博客都会逐步迁移过去。