概述
以下是我想要如何显示DataFrame:
Male Female
Sport_Played
Basketball 1 2
Hockey 2 1
Soccer 2 1
Volleyball 2 1
以下是目前的安排:
Sport_Played Male_or_Female
Basketball Female 2
Male 1
Hockey Female 1
Male 2
Soccer Female 1
Male 2
Volleyball Female 1
Male 2
有比我下面做的更好的方法吗?
我的代码
# Sample DataFrame
df = pd.DataFrame(list([['Male', 'Soccer', '18'], ['Male', 'Soccer', '18'], ['Male', 'Hockey', '18'],
['Male', 'Hockey', '18'], ['Female', 'Basketball', '18'], ['Male', 'Volleyball', '18'],
['Male', 'Volleyball', '18'], ['Female', 'Basketball', '18'], ['Female', 'Soccer', '18'],
['Female', 'Hockey', '18'], ['Female', 'Volleyball', '18'], ['Male', 'Basketball', '18']]),
columns=['Male_or_Female', 'Sport_Played', 'Age'])
# This is how my output is originally summarized
groupOG= df.groupby(by=['Sport_Played', 'Male_or_Female'])['Sport_Played'].count()
# This is my workaround
group1 = df[df['Male_or_Female'] == 'Male'].groupby(by='Sport_Played')['Sport_Played'].count()
group2 = df[df['Male_or_Female'] == 'Female'].groupby(by='Sport_Played')['Sport_Played'].count()
groupWorkaround= pd.DataFrame({'Male': group1, 'Female': group2})
print(groupOG, groupWorkaround)
您可以在此处使用pd.crosstab
。
pd.crosstab(df['Sport_Played'], df['Male_or_Female'])
Male_or_Female Female Male
Sport_Played
Basketball 2 1
Hockey 1 2
Soccer 1 2
Volleyball 1 2
或
使用pd.pivot_table
df.pivot_table(index='Sport_Played', columns = 'Male_or_Female',aggfunc='size')
Male_or_Female Female Male
Sport_Played
Basketball 2 1
Hockey 1 2
Soccer 1 2
Volleyball 1 2
或
df.groupby
与GroupBy.size
和df.unstack
df.groupby(['Sport_Played','Male_or_Female']).size().unstack()
# Same output as above