替代 python pivot_table 两个变量的频率 table
alternative for python pivot_table for frequency table of two variables
对于这样的数据
import pandas as pd
df=pd.DataFrame({'group1': list('AABBCCAABBCC'),'group2':list('ZYYXYXXYZXYZ')})
我费了好大劲才弄明白,要使行和列的频率table,最常见的方法如下
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
我只是想知道是否有任何 'faster' 方法可以生成相同的 table。并不是说它有什么问题,但我的意思是需要更少的输入(无需我编写自定义函数)
我只是将其与 R 进行比较,后者可以通过
获得相同的结果
table(df$group1,df$group2)
与此相比,输入非默认参数,如 aggfunc
和 fill_value
并输入参数名称,index
和 columns
似乎需要付出很多额外的努力。
总的来说,我的经验(非常有限)是 python 中的 R 等效函数在简洁性上非常相似。
任何关于替代方法的建议都会很棒。我需要用我的数据制作其中的几个 table。
这是另一种方法。
>>> 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
pd.crosstab(df['group1'],df['group2'])
这正是我要找的。最初搜索时没有找到它。
对于这样的数据
import pandas as pd
df=pd.DataFrame({'group1': list('AABBCCAABBCC'),'group2':list('ZYYXYXXYZXYZ')})
我费了好大劲才弄明白,要使行和列的频率table,最常见的方法如下
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
我只是想知道是否有任何 'faster' 方法可以生成相同的 table。并不是说它有什么问题,但我的意思是需要更少的输入(无需我编写自定义函数)
我只是将其与 R 进行比较,后者可以通过
获得相同的结果 table(df$group1,df$group2)
与此相比,输入非默认参数,如 aggfunc
和 fill_value
并输入参数名称,index
和 columns
似乎需要付出很多额外的努力。
总的来说,我的经验(非常有限)是 python 中的 R 等效函数在简洁性上非常相似。
任何关于替代方法的建议都会很棒。我需要用我的数据制作其中的几个 table。
这是另一种方法。
>>> 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
pd.crosstab(df['group1'],df['group2'])
这正是我要找的。最初搜索时没有找到它。