Pandas Dataframe groupby()

nfs0ujit  于 2022-12-28  发布在  其他
关注(0)|答案(2)|浏览(191)

我有一个数据集,看起来像这样:
| 姓名|现况|活动|
| - ------|- ------|- ------|
| 简|学生|是的|
| 约翰|商人|是的|
| 埃勒|学生|没有|
| 克里斯|警察|是的|
| 约翰|商人|没有|
| 黏土|商人|是的|
我想按StatusNameActivity为“是”)对数据集进行分组,并对Name进行计数。如果它至少有一个“是”,则将对其进行计数。
基本上,这就是我想要的输出
学生1简
商人2约翰·克莱
警察1克里斯
我试过这些密码:

cb = (DataFrame.groupby(['Name', 'Status']).sum(DataFrame['Activity'].eq('yes')))

cb = (DataFrame.groupby(['Name', 'Status']).any(DataFrame['Activity'].eq('yes')))

cb = (DataFrame.groupby(['Name', 'Status']).nunique(DataFrame['Activity'].eq('yes')))

但是,它们都给予了这个误差:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

请帮我修复这个代码。谢谢你提前!

yb3bgrhw

yb3bgrhw1#

示例

data = {'Name': {0: 'Jane', 1: 'John', 2: 'Elle', 3: 'Chris', 4: 'John', 5: 'Clay'},
        'Status': {0: 'student', 1: 'businessman', 2: 'student', 3: 'policeman', 4: 'businessman', 5: 'businessman'},
        'Activity': {0: 'yes', 1: 'yes', 2: 'no', 3: 'yes', 4: 'no', 5: 'yes'}}
df = pd.DataFrame(data)

代码

out = (df[df['Activity'].eq('yes')]
       .groupby('Status', sort=False)['Name'].agg(['count', ', '.join]))

第一个月

count   join
Status      
student     1       Jane
businessman 2       John, Clay
policeman   1       Chris
xqnpmsa8

xqnpmsa82#

检查以下内容:

dd = df.query("Activity != 'no'").\
groupby('Status').\
agg({'Name':[','.join,'count']}).reset_index()

dd.columns = ['Status','Names','count']

dd.head()

输出:

相关问题