计入类别

时间:2017-12-13 22:47:00

标签: python pandas

假设我有以下形式的数据:

d = {'col1': ['State A','State A','State A', 'State B','State B'], 'col2': ['Town A', 'Town A', 'Town B', 'Town A','Town B']}
df = pd.DataFrame(data=d)

我想用groupby来计算A镇和B镇的A镇和B镇的出现次数。所以像

State A  Town A  2
         Town B  1
State B  Town A  1
         Town B  1

这是什么语法?通常的groupby返回一个空数据帧,因为没有其他列。

df.groupby(['col1','col2']).count()

3 个答案:

答案 0 :(得分:2)

试试吧:

df.groupby(['col1','col2']).size()

输出:

col1     col2  
State A  Town A    2
         Town B    1
State B  Town A    1
         Town B    1
dtype: int64

并且,您可以使用to_frame()或reset_index()来获取数据帧。

答案 1 :(得分:2)

计算子组中的值

您要查找的输出是pandas.crosstab

put_function_concurrency

如果您想要Multiindex,我建议将stack添加到上一个命令:

>>>  pd.crosstab(df.col1, df.col2)

col2     Town A  Town B
col1
State A       2       1
State B       1       1

如果您确实想使用groupby,请使用>>> pd.crosstab(df.col1, df.col2).stack() col1 col2 State A Town A 2 Town B 1 State B Town A 1 Town B 1

.size()

答案 2 :(得分:1)

您可以添加['col2']来修复代码

df.groupby(['col1','col2'])['col2'].count()
Out[150]: 
col1     col2  
State A  Town A    2
         Town B    1
State B  Town A    1
         Town B    1
Name: col2, dtype: int64

如果你需要排序

df1=df.groupby(['col1','col2'])['col2'].count().to_frame('value')

df1['helpcol']=df1.index.get_level_values(0)

df1.sort_values(['helpcol','value'],ascending=[True,True])
Out[164]: 
                value  helpcol
col1    col2                  
State A Town B      1  State A
        Town A      2  State A
State B Town A      1  State B
        Town B      1  State B