python - 如何从时间序列重采样中获取列内的类别计数

标签 python pandas dataframe time-series

我是数据框架的新手,正在努力弄清楚如何完成以下任务:

我已经有一个数据帧作为时间序列,如下所示:

timestamp             source                        
2017-06-18 10:43:54    two
2017-06-20 03:38:23    three
2017-06-18 07:37:02    one
2017-06-07 16:49:51    two
2017-06-15 22:36:10    two
2017-06-07 16:49:51    two
2017-06-18 22:36:10    two

我正在尝试 1) 重新采样为每日,2) 获取当天每个类别的百分比。就像这样:

timestamp      One    Two  Three                    
2017-06-18     33%    66%    0%
2017-06-20     0%     0%    100%
2017-06-07     0%    100%    0%
2017-06-15     0%    100%    0%

我可以完成基本的事情,例如每天重新采样“源”的计数,但它不会将其分解为类别。

有人能帮我指出正确的方向吗?非常感谢。

最佳答案

groupby + value_counts + unstack

(df.groupby(df.timestamp.dt.date).source.value_counts(normalize=True)*100).unstack().fillna(0)

source            one  three         two
timestamp                               
2017-06-07   0.000000    0.0  100.000000
2017-06-15   0.000000    0.0  100.000000
2017-06-18  33.333333    0.0   66.666667
2017-06-20   0.000000  100.0    0.000000
<小时/>

数据透视表

df2 = df.pivot_table(index=df.timestamp.dt.date, columns='source', aggfunc='size')
df2 = df2.divide(df2.sum(1), axis=0).fillna(0)*100

pd.crosstab

pd.crosstab(df.timestamp.dt.date, df.source, normalize='index')*100

关于python - 如何从时间序列重采样中获取列内的类别计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53148446/

相关文章:

python - 如何使用 BeautifulSoup4 将 <br> 标记之前的所有文本获取到 pandas 数据框中

mysql - 将特定 Dataframe 列插入到多个 MySQL 表中

python - 如何删除数据框中的回车

python - Pyspark 使用 sql.transform 使包含结构数组的列中的所有空字符串无效

python - 每个用户的数据帧的移动平均值。 python 、 Pandas

python - 使用 sympy 计算条件概率

python - 为什么较高的压缩级别会导致较大的 zip 文件?

python - 在 python 中如何将 ascii 表转换为适合表?

python - 如何从模型属性填充 django 管理表单?

R——如何根据 grep 行名称进行子集化