谢谢您的帮助.
我的数据看起来像这样:
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和size
或value_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