具有来自 table 文件的重采样日期时间的交叉表数据框
Crosstab Dataframe with resampled datetime from table file
给出这样的文件:
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
其中列是类别,行是日期箱,值是这些箱中类别的出现
我的问题是我不知道如何按年或月对日期时间进行分类,然后构建交叉表矩阵。
我在 Whosebug 上看到,重新采样功能是对日期时间和交叉表进行分类然后构建矩阵的最佳方式:
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
给出这样的文件:
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
其中列是类别,行是日期箱,值是这些箱中类别的出现
我的问题是我不知道如何按年或月对日期时间进行分类,然后构建交叉表矩阵。 我在 Whosebug 上看到,重新采样功能是对日期时间和交叉表进行分类然后构建矩阵的最佳方式:
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