Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建一个Pandas Groupby对象,其中每列对原始数据都有一个过滤器?_Python_Sql_Pandas_Group By_Pandas Groupby - Fatal编程技术网

Python 如何创建一个Pandas Groupby对象,其中每列对原始数据都有一个过滤器?

Python 如何创建一个Pandas Groupby对象,其中每列对原始数据都有一个过滤器?,python,sql,pandas,group-by,pandas-groupby,Python,Sql,Pandas,Group By,Pandas Groupby,我试图用Pandas复制以下SQL,但它比我预期的要复杂得多: 选择 身份证件 ,count(*) ,计数(当某个条件为真时,则为1结束) ,计数(当某个条件为False时,则为1结束) 从桌子上 按id分组 我唯一能想到的是这样的事情: grouped=df.groupby('id')) df_total=grouped.count() df_some_condition=grouped.filter(…).count() df_some_other_condition=grouped.fi

我试图用Pandas复制以下SQL,但它比我预期的要复杂得多:

选择
身份证件
,count(*)
,计数(当某个条件为真时,则为1结束)
,计数(当某个条件为False时,则为1结束)
从桌子上
按id分组
我唯一能想到的是这样的事情:

grouped=df.groupby('id'))
df_total=grouped.count()
df_some_condition=grouped.filter(…).count()
df_some_other_condition=grouped.filter(…).count()
df_total.join(df_some_condition,on='id').join(df_some_other_condition,on='id'))
我只是感到惊讶,我不能用groupby().count()生成过滤列,而且我必须创建3个单独的数据帧,然后将它们连接起来。有没有一种我忽略的更简单的方法

注意:这里的语法可能不完全正确,只是快速写了一些东西来说明我的问题

df = pd.DataFrame({'id': [1, 1, 2, 2, 3, 3, 4],
 'val1': [0.0, 48.0, 4.0, 20.0, 24.0, 25.0, 0.0],
 'val2': [0.0, 0.0, 1.0, 40.0, 22.0, 7.0, 13.0]})
df

如何重新创建“选择”

df.assign(result1 = np.where(df['val1']<25, 1,0),
          result2 = np.where(df['val2'] > 4,1,0)).groupby('id').agg(count=('id','size'),
                                                                    res1_sum=('result1',sum),
                                                                    res2_sum=('result2',sum))
df

如何重新创建“选择”

df.assign(result1 = np.where(df['val1']<25, 1,0),
          result2 = np.where(df['val2'] > 4,1,0)).groupby('id').agg(count=('id','size'),
                                                                    res1_sum=('result1',sum),
                                                                    res2_sum=('result2',sum))

请添加具有预期输出的输入数据请添加具有预期输出的输入数据
    count   res1_sum    res2_sum
id          
1       2          1           0
2       2          2           1
3       2          1           2
4       1          1           1