python pivot_table的替代方案,用于两个变量的频率表

时间:2016-02-17 23:01:11

标签: python r pivot-table frequency

对于像这样的数据

import pandas as pd

df=pd.DataFrame({'group1': list('AABBCCAABBCC'),'group2':list('ZYYXYXXYZXYZ')})

我想要制作行和列的频率表时遇到一些困难,最常见的方法如下

print df.pivot_table(index='group1',columns='group2',aggfunc=len,fill_value=0)

我得到了

group2  X  Y  Z
group1         
A       1  2  1
B       2  1  1
C       1  2  1

我只是想知道是否有任何'更快'的方式来生成相同的表。并不是说它有什么问题,但我的意思是涉及更少打字的东西(没有我必须编写自定义功能)

我只是将它与R进行比较,其中

可以实现相同的结果
 table(df$group1,df$group2)

与此相比,输入非aggfuncfill_value等非默认参数并输入参数名称indexcolumns似乎需要付出更多努力。

一般来说,我的经验(非常有限)是python中的R等效函数非常简洁。

关于替代方法的任何建议都会很棒。我需要用我的数据制作其中几个表。

2 个答案:

答案 0 :(得分:1)

这是另一种方法。

>>> df.groupby(['group1', 'group2']).group2.count().unstack().fillna(0)
group2  X  Y  Z
group1         
A       1  2  1
B       2  1  1
C       1  2  1

答案 1 :(得分:1)

pd.crosstab(df['group1'],df['group2'])

这正是我想要的。我最初在搜索时没找到它。