熊猫:使用一列的值根据两列计算表中的行数

  • 本文关键字:计算 两列 一列 熊猫 pandas
  • 更新时间 :
  • 英文 :


我目前有以下数据帧:

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,则可以使用groupbyvalue_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

最新更新