我是数据框架的新手,正在努力弄清楚如何完成以下任务:
我已经有一个数据帧作为时间序列,如下所示:
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/