假设我有以下形式的数据:
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()
答案 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