我是数据帧的新手,正在努力寻找如何实现以下目标的方法:
我已经有一个像这样的时间序列的数据帧:
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%
我可以完成一些基本工作,例如,每天重新采样“来源”的数量,但并没有将其细分为类别。
有人可以帮我指出正确的方向吗?非常感谢。
答案 0 :(得分:2)
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
pivot_table
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
答案 1 :(得分:0)
to_period + value_counts 可以提供帮助!
date winlose
0 2020-01-17 -1
1 2020-01-28 0
2 2020-02-06 0
3 2020-02-20 1
4 2020-02-21 1
<块引用>
df.to_period('M').groupby('date')['winlose'].value_counts().unstack().fillna(0) 应该是另一个选择
winlose -1 0 1
date
2020-01 1.0 1.0 0.0
2020-02 0.0 2.0 2.0
2020-03 0.0 0.0 1.0
2020-04 1.0 1.0 1.0
2020-05 1.0 3.0 0.0
2020-06 0.0 2.0 1.0
2020-07 1.0 3.0 0.0
2020-08 1.0 1.0 1.0
2020-09 1.0 3.0 0.0
2020-10 1.0 1.0 0.0
2020-11 0.0 1.0 0.0
2020-12 2.0 3.0 1.0