我正在努力拓宽我的python视野并学会做一些在Excel中执行相当简单的事情。
我有这些数据:
Group Function
1 A
1 B
1 C
2 A
2 C
3 C
3 A
3 D
4 E
我想要一个表格,以这种格式显示信息(使用Excel中的数据透视表,使用列:功能,行:组,值:组计数)
Function
Group A B C D E
1 1 1 1
2 1 1
3 1 1 1
4 1
我已经创建了一个数据框并添加了一个列,如下所示:
df = pd.read_excel(filepath)
df['1']=1
print(df.groupby('GROUP'))
但:
1)它没有识别Function字段,因为它是dtype:object 2)它并没有真正实现我正在寻找的功能,这让我觉得它可能不是我需要的功能。我也尝试过各种各样的pivot_table迭代,但似乎无法让它继续工作。
有没有人有任何想法?提前谢谢。
答案 0 :(得分:3)
pd.crosstab
怎么样?按原样读入数据,然后转换:
In [227]: pd.crosstab(df.Group, df.Function)
Out[227]:
Function A B C D E
Group
1 1 1 1 0 0
2 1 0 1 0 0
3 1 0 1 1 0
4 0 0 0 0 1
使用df.replace
删除零:
In [228]: pd.crosstab(df.Group, df.Function).replace(0, '')
Out[228]:
Function A B C D E
Group
1 1 1 1
2 1 1
3 1 1 1
4 1
答案 1 :(得分:2)
或使用pivot
df1['val']=1
df1.pivot(index='Group', columns='Function')['val']
Function A B C D E
Group
1 1.0 1.0 1.0 NaN NaN
2 1.0 NaN 1.0 NaN NaN
3 1.0 NaN 1.0 1.0 NaN
4 NaN NaN NaN NaN 1.0
df1.pivot(index='Group', columns='Function')['val'].fillna(' ')
Function A B C D E
Group
1 1 1 1
2 1 1
3 1 1 1
4 1
或使用groupby
:
df1.groupby(['Group','Function']).size().unstack().fillna(' ')
Function A B C D E
Group
1 1 1 1
2 1 1
3 1 1 1
4 1
答案 2 :(得分:2)
选项1
pd.get_dummies(df.Group).T.dot(pd.get_dummies(df.Function))
A B C D E
1 1 1 1 0 0
2 1 0 1 0 0
3 1 0 1 1 0
4 0 0 0 0 1
选项2
i, r = pd.factorize(df.Group.values)
j, c = pd.factorize(df.Function.values)
a = np.zeros((r.size, c.size), dtype=int)
a[i, j] = 1
pd.DataFrame(a, r, c)
A B C D E
1 1 1 1 0 0
2 1 0 1 0 0
3 1 0 1 1 0
4 0 0 0 0 1
选择3
i, r = pd.factorize(df.Group.values)
j, c = pd.factorize(df.Function.values)
a = np.bincount(
i * c.size + j, minlength=r.size * c.size
).reshape(r.size, c.size)
pd.DataFrame(a, r, c)
A B C D E
1 1 1 1 0 0
2 1 0 1 0 0
3 1 0 1 1 0
4 0 0 0 0 1