假设我有一个数据帧:
nj ptype wd wpt
0 2 1 2 1
1 3 2 1 2
2 1 1 3 1
3 2 2 3 3
4 3 1 2 2
我想使用ptype
作为索引来聚合这些数据,如下所示:
nj wd wpt
1.0 2.0 3.0 1.0 2.0 3.0 1.0 2.0 3.0
ptype
1 1 1 1 0 2 1 2 1 0
2 0 1 1 1 0 1 0 1 1
通过使用aggfunc='count'
创建一个透视表,然后将它们全部连接起来,可以为最终值构建每个顶级列,如下所示:
nj = df.pivot_table(index='ptype', columns='nj', aggfunc='count').ix[:, 'wd']
wpt = df.pivot_table(index='ptype', columns='wpt', aggfunc='count').ix[:, 'wd']
wd = df.pivot_table(index='ptype', columns='wd', aggfunc='count').ix[:, 'nj']
out = pd.concat([nj, wd, wpt], axis=1, keys=['nj', 'wd', 'wpt']).fillna(0)
out.columns.names = [None, None]
print(out)
nj wd wpt
1 2 3 1 2 3 1 2 3
ptype
1 1.0 1.0 1.0 0.0 2.0 1.0 2.0 1.0 0.0
2 0.0 1.0 1.0 1.0 0.0 1.0 0.0 1.0 1.0
但我真的不喜欢这样,感觉不对。我想知道是否有一种方法可以更简单地实现这一点,最好是使用内置方法。提前谢谢!
您可以先进行聚合,然后使用
unstack
方法pivot
,而不是一步完成聚合:避免使用
apply
方法的另一个选项:样本数据上的原始计时:
原始解决方案:
选择一:
选项二:
一个简单的解决方案是
在本例中,对于salary列,我们使用不同的聚合函数
另一个使用groupby和unstack的解决方案。
相关问题 更多 >
编程相关推荐