我目前有以下数据帧:
SN Gender Purchase
Name 1 Female 1.14
Name 2 Female 2.50
Name 3 Male 7.77
Name 1 Female 2.74
Name 3 Male 4.58
Name 3 Male 9.99
Name 1 Female 5.55
Name 2 Female 1.20
我正试图弄清楚如何从这样的表中获得计数,而不是数据帧。计数必须基于性别(那么,有多少雄性?(,但必须按名称(SN(唯一。所以,在这个例子中,我会有1个雄性和2个雌性。我尝试了多种方法。。。数据帧中的valuecount、数据帧中唯一的valuecount等等,但我总是遇到语法错误。
有几种方法可以实现这一点。
最简单的方法是使用pd.crosstab
来获得值的交叉列表(计数(:
pd.crosstab(df["SN"], df["Gender"])
Gender Female Male
SN
Name 1 3 0
Name 2 2 0
Name 3 0 3
另一种方法是使用CCD_ 2,该CCD_1.1.0
。这不是交叉列表,而是返回一个序列,其值是每个唯一索引组合的数据计数。索引是指"SN" and "Gender"
的唯一组合的MultiIndex
df.value_counts(["SN", "Gender"])
SN Gender
Name 3 Male 3
Name 1 Female 3
Name 2 Female 2
dtype: int64
如果使用的Panda版本早于1.1.0
,则可以使用groupby
和value_counts
的组合。这执行与DataFrame.value_counts
功能等效的操作,因此我们获得相同的输出:
df.groupby("SN")["Gender"].value_counts()
SN Gender
Name 1 Female 3
Name 2 Female 2
Name 3 Male 3
Name: Gender, dtype: int64
编辑:如果只想计算每个性别的唯一"SN"
的数量,可以使用nunique()
而不是value_counts
:
unique_genders = df.groupby(["Gender"])["SN"].nunique()
print(unique_genders)
Gender
Female 2
Male 1
Name: SN, dtype: int64
然后你可以提取每个:
>>> unique_genders["Female"]
2
>>> unique_geners["Male"]
1