对于像这样的数据
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)
与此相比,输入非aggfunc
和fill_value
等非默认参数并输入参数名称index
和columns
似乎需要付出更多努力。
一般来说,我的经验(非常有限)是python中的R等效函数非常简洁。
关于替代方法的任何建议都会很棒。我需要用我的数据制作其中几个表。
答案 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'])
这正是我想要的。我最初在搜索时没找到它。