给定一个这样的文件:

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 热图:
python - 具有从表文件重新采样的日期时间的交叉表数据框-LMLPHP

最佳答案

看来您需要将 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/

10-10 19:11