有没有更简洁的方法来计算熊猫中一组的行?

时间:2019-06-10 08:19:52

标签: python pandas

这是数据表

enter image description here

要计算以“年龄” ==“年轻”为条件的行,按班级分组,我使用这段代码

df.loc[(df['Age']=='young') & (df['Class'] == 'Yes'),'Class'].count()
df.loc[(df['Age']=='young') & (df['Class'] == 'No'),'Class'].count()

输出

2
3

是否有一种简洁的方法来获取行数(2和3)?

5 个答案:

答案 0 :(得分:3)

您可以使用:

print(df.groupby('Class').size())

如果只需要'young'

print(df[df['Age'].eq('young')].groupby('Class').size())

答案 1 :(得分:3)

value_counts返回一个包含唯一值计数的系列

df.loc[(df['Age']=='young'), 'Class'].value_counts()

输出

No     3
Yes    2
Name: Class, dtype: int64

答案 2 :(得分:0)

您也可以尝试DATETIME2。您将通过这些值的组合获得所有计数(不仅是Age == Young),而且以后可以将其过滤掉。

答案 3 :(得分:0)

您可以在这里为每个年龄段类别计数:

df.groupby(['Age','Class'])['Class'].count()

答案 4 :(得分:0)

我看到已经提供了足够的答案,但是为了便于后代在此放置示例数据集,以便为了测试而创建和使用该数据集。

模仿数据集:

>>> df = pd.DataFrame({'Age': ['young','young','young','young','young'], 'Has_job':['False','False','True','True','False'], 'Own_house':['False','False','False','True','False',], \
...                    'Credit_rating': ['fair','Good','Good','fair','fair'], 'Class':['No','No','Yes','Yes','No']})

DataFrame:

>>> df
     Age Class Credit_rating Has_job Own_house
0  young    No          fair   False     False
1  young    No          Good   False     False
2  young   Yes          Good    True     False
3  young   Yes          fair    True      True
4  young    No          fair   False     False
  1. 在这里调用.size()是获取作业的最简单方法,因为它返回了Series
>>> df.groupby(['Class']).size()
Class
No     3
Yes    2
dtype: int64
  1. 但是,如果要以DataFrame而不是序列的形式返回,请在下面使用。
>>> df.groupby(['Class']).size().reset_index(name='counts')
  Class  counts
0    No       3
1   Yes       2
  1. 或者您可以按以下方式应用分组依据。
>>> df.groupby(['Class'])['Age'].count()
Class
No     3
Yes    2
Name: Age, dtype: int64
  1. @ U9-Forward建议的另一种方法。
>>> df.groupby(['Class'], as_index=False).size()
Class
No     3
Yes    2
dtype: int64