我真的无法摆脱这个。这是我的表:
其中等级可以是A,B,C
doc_id, grade, timestamp
1, A, 27/01/15
2, A, 27/01/15
3, B, 27/01/15
...
我的目标是显示一条包含三行的图表,显示我通过时间获得了多少A,B和C.
我只能想到这个:
docs[docs['grade']== 'A'].groupby('time').count()
docs[docs['grade']== 'B'].groupby('time').count()
docs[docs['grade']== 'C'].groupby('time').count()
并将它们结合起来如何,但已经很清楚我的方法是错误的,
任何提示?
答案 0 :(得分:1)
试试这个:
df2 = df.groupby(['timestamp', 'grade']).grade.size().unstack().cumsum().ffill().fillna(0)
它基本上按日期和等级进行调整,累计累计金额。
>>> df2
grade A B C
timestamp
4/1/15 0 1 0
4/11/15 4 1 2
4/3/15 4 4 2
4/4/15 4 5 3
4/5/15 4 6 3
4/6/15 7 6 6
4/8/15 9 6 8
4/9/15 13 7 12
如果您不想累积总和,可以使用:
df2 = df.groupby(['timestamp', 'grade']).grade.size().unstack().fillna(0)
答案 1 :(得分:1)
让input_data
成为
grade timestamp
doc_id
1 A 27/01/15
2 A 27/01/15
3 B 27/01/15
4 C 27/01/15
5 A 27/01/16
6 A 27/01/16
7 A 27/01/16
8 B 27/01/16
9 B 27/01/16
10 C 27/01/16
11 A 27/01/16
12 B 27/01/16
13 C 27/01/16
14 C 27/01/16
因此,为了显示一条包含三行的图表,显示您通过时间获得了多少A,B和C,您可以使用
result = input_data.groupby(['timestamp']).apply(lambda x: x.grade.value_counts())
输出将是这样的
A B C
timestamp
27/01/15 2 1 1
27/01/16 4 3 3
您可以使用result.plot()
绘制数据。