我对python中的pandas库非常陌生,我一直试图拼凑如何获取像这样的数据框
'Date' 'Color'
0 '05-10-2017' 'Red'
1 '05-10-2017' 'Green'
2 '05-10-2017' 'Blue'
3 '05-10-2017' 'Red'
4 '05-10-2017' 'Blue'
5 '05-11-2017' 'Red'
6 '05-11-2017' 'Green'
7 '05-11-2017' 'Red'
8 '05-11-2017' 'Green'
9 '05-11-2017' 'Blue'
10 '05-11-2017' 'Blue'
11 '05-11-2017' 'Red'
12 '05-11-2017' 'Blue'
13 '05-11-2017' 'Blue'
14 '05-12-2017' 'Green'
15 '05-12-2017' 'Blue'
16 '05-12-2017' 'Red'
17 '05-12-2017' 'Blue'
18 '05-12-2017' 'Blue'
并输出一个具有唯一日期作为索引,颜色作为列标题,每天的值计数如下:
'Date' 'Red' 'Green' 'Blue'
'05-10-2017' 2 1 2
'05-11-2017' 3 2 3
'05-12-2017' 1 1 3
过去两天我一直在努力搜索这个网站,试图拼凑出一种实现这一目标的方法,到目前为止我只能生成独特日期的索引。我在使用value_counts时遇到了一些麻烦。如果有人能够向我展示一种方法,或者如果已经回答了这个方法,我会很感激。我已经用尽了我的搜索能力,终于决定在这里问我的第一个问题。如果我是个白痴,请保持温柔。
答案 0 :(得分:5)
您可以使用:
1。
groupby
+ size
用于汇总,unstack
用于重塑:
df1 = df.groupby(["'Date'","'Color'"]).size().unstack(fill_value=0)
print (df1)
'Color' 'Blue' 'Green' 'Red'
'Date'
'05-10-2017' 2 1 2
'05-11-2017' 4 2 3
'05-12-2017' 3 1 1
<强> 2 强>
pivot_table
解决方案:
df1 = df.pivot_table(index="'Date'",columns="'Color'", aggfunc='size')
print (df1)
'Color' 'Blue' 'Green' 'Red'
'Date'
'05-10-2017' 2 1 2
'05-11-2017' 4 2 3
'05-12-2017' 3 1 1
第3 强>
crosstab
解决方案,更慢:
df1 = pd.crosstab(df["'Date'"],df["'Color'"])
print (df1)
'Color' 'Blue' 'Green' 'Red'
'Date'
'05-10-2017' 2 1 2
'05-11-2017' 4 2 3
'05-12-2017' 3 1 1