我有一个如下所示的数据框df
:
df name city
0 John New York
1 Carl New York
2 Carl Paris
3 Eva Paris
4 Eva Paris
5 Carl Paris
我想知道不同城市的总人数
df2 city number
0 New York 2
1 Paris 3
或城市中具有相同名称的人数
df2 name city number
0 John New York 1
1 Eva Paris 2
2 Carl Paris 2
3 Eva New York 0
答案 0 :(得分:1)
我认为需要GroupBy.size
:
df1 = df.groupby(['city']).size().reset_index(name='number')
print (df1)
city number
0 New York 2
1 Paris 4
df2 = df.groupby(['name','city']).size().reset_index(name='number')
print (df2)
name city number
0 Carl New York 1
1 Carl Paris 2
2 Eva Paris 2
3 John New York 1
如果需要所有组合,则一个解决方案是添加unstack
和stack
:
df3=df.groupby(['name','city']).size().unstack(fill_value=0).stack().reset_index(name='count')
print (df3)
name city number
0 Carl New York 1
1 Carl Paris 2
2 Eva New York 0
3 Eva Paris 2
4 John New York 1
5 John Paris 0
或reindex
与MultiIndex.from_product
:
df2 = df.groupby(['name','city']).size()
mux = pd.MultiIndex.from_product(df2.index.levels, names=df2.index.names)
df2 = df2.reindex(mux, fill_value=0).reset_index(name='number')
print (df2)
name city number
0 Carl New York 1
1 Carl Paris 2
2 Eva New York 0
3 Eva Paris 2
4 John New York 1
5 John Paris 0
答案 1 :(得分:0)
计算同一城市中姓名不同的人数:
groups = df.groupby('city').count().reset_index()
计算不同城市中具有相同名称的人数:
groups = df.groupby('city').count().reset_index()