给定一个这样的文件:
date uselessinfo category uselessinfo2
2011-07-22 02:56:36 banana 1 apple
2011-02-27 17:15:44 banana 4 apple
2010-12-12 00:13:42 banana 1 apple
2010-10-12 00:13:00 banana 2 apple
我正在使用 Pandas 构建一个 DataFrame:
data = pd.read_table(pathToFile, "\t")
由此,我尝试使用简单的 Pandas 方法来构建交叉表矩阵,例如:
1 2 3 4
2010 1 1 0 0
2011 1 0 0 1
其中列是类别,行是日期箱,值是这些箱中类别的出现
我的问题是我不知道如何按年或月对日期时间进行分组,然后构建交叉表矩阵。
我在 stackoverflow 上看到,重新采样函数是合并日期时间和交叉表然后构建矩阵的最佳方法:
data = data.resample('M', on='date').sum()
data = pd.crosstab(data.date,data.category)
有没有办法结合这两个函数来获得所需的矩阵?还是我完全做错了?
实现的目标是使用此矩阵绘制如下所示的 seaborn 热图:
最佳答案
看来您需要将 date
转换为 year
:
data = pd.read_table(pathToFile, "\t", parse_dates=['date'])
data = pd.crosstab(data.date.dt.year ,data.category)
print (data)
category 1 2 4
date
2010 1 1 0
2011 1 0 1
但如果需要先按月重新采样:
data = data.resample('M', on='date').sum().reset_index()
data = pd.crosstab(data.date.dt.year,data.category)
如果更改数据,差异最好看:
print (data)
date uselessinfo category uselessinfo2
0 2011-07-22 02:56:36 banana 1 apple
1 2011-07-27 02:56:36 banana 7 apple
2 2011-08-27 17:15:44 banana 4 apple
3 2011-09-12 00:13:42 banana 1 apple
4 2011-09-12 00:13:00 banana 2 apple
data = data.resample('M', on='date').sum().reset_index()
data = pd.crosstab(data.date.dt.year,data.category)
print (data)
category 3 4 8
date
2011 1 1 1
data = pd.crosstab(data.date.dt.year,data.category)
print (data)
category 1 2 4 7
date
2011 2 1 1 1
关于python - 具有从表文件重新采样的日期时间的交叉表数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44963691/