Python Pandas groupby多列

谢谢您的帮助.

我的数据看起来像这样:

city,  room_type
A, X
A, Y
A, Z
B, X
B, Y
B, Y

我希望我的最终结果看起来像这样:

city, count(X), count(Y), count(z) 
A,  1, 1, 1
B,  1, 2, 0

我按城市分组,我想显示每个城市中每个room_type的数量.

用python pandas做任何方法吗?谢谢.

我在几年前学过SQL,并认为它可能是可能的.我相信python可以做同样的事情.谢谢!

最佳答案 您可以将
crosstab与重命名列一起使用:

df = pd.crosstab(df.city, df.room_type).rename(columns=lambda x: 'count({})'.format(x))
print (df)
room_type  count(X)  count(Y)  count(Z)
city                                   
A                 1         1         1
B                 1         2         0

使用groupby和sizevalue_counts进行重塑的另一个解决方案unstack

df = df.groupby(['city', 'room_type']).size().unstack(fill_value=0)
       .rename(columns=lambda x: 'count({})'.format(x))
print (df)
room_type  count(X)  count(Y)  count(Z)
city                                   
A                 1         1         1
B                 1         2         0
df = df.groupby('city')['room_type'].value_counts().unstack(fill_value=0)
       .rename(columns=lambda x: 'count({})'.format(x))
print (df)
room_type  count(X)  count(Y)  count(Z)
city                                   
A                 1         1         1
B                 1         2         0
点赞