仅当熊猫的某一列中存在某个值时,Groupby才进行计数

Manikantha Nekkalapudi

我有一个类似于下面提到的数据库的数据框:

+------------+-----+--------+ | time | id | status | +------------+-----+--------+ | 1451606400 | id1 | Yes | | 1451606400 | id1 | Yes | | 1456790400 | id2 | No | | 1456790400 | id2 | Yes | | 1456790400 | id2 | No | +------------+-----+--------+

我将上述所有列进行分组,并且可以'count'使用以下命令成功命名的其他列中获得计数

df.groupby(['time','id', 'status']).size().reset_index(name='count')

但是我只希望上面数据框中的计数仅在带有status = 'Yes'和的'0'

所需输出:

+------------+-----+--------+---------+ | time | id | status | count | +------------+-----+--------+---------+ | 1451606400 | id1 | Yes | 2 | | 1456790400 | id2 | Yes | 1 | | 1456790400 | id2 | No | 0 | +------------+-----+--------+---------+

我试图status = 'Yes'用下面的代码来计数

df[df['status']== 'Yes'].groupby(['time','id','status']).size().reset_index(name='count')

这显然给了我这些行,status = 'Yes'其余的都丢弃了。我想要被丢弃的count = 0

有什么办法得到结果吗?

提前致谢!

耶斯列尔

将lambda函数与apply和一起用于计算sumboolenaTrue值过程,例如1

df1 = (df.groupby(['time','id','status'])
         .apply(lambda x: (x['status']== 'Yes').sum())
         .reset_index(name='count'))

或创建新的列并聚合sum

df1 = (df.assign(A=df['status']=='Yes')
         .groupby(['time','id','status'])['A']
         .sum()
         .astype(int)
         .reset_index(name='count'))

非常相似的解决方案,没有新的列,但可读性较差:

df1 = ((df['status']=='Yes')
        .groupby([df['time'],df['id'],df['status']])
        .sum()
        .astype(int)
        .reset_index(name='count'))

print (df)
         time   id status  count
0  1451606400  id1    Yes      2
1  1456790400  id2     No      0
2  1456790400  id2    Yes      1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何仅当给定值存在于 Excel 的另一列中时才替换值

dplyr仅在同一列的组中存在另一个值时才对值进行过滤

仅当列值等于某个值或在该值之间的行中(熊猫)时才保留列值

仅当其他列具有条件时,才对列中的唯一值进行计数

在熊猫中填充另一列中某一列的缺失值

MySQL:仅当另一列中的值唯一时才设置值

仅当另一列在R中具有良好的值时,才连续列的总和

仅当列中存在特定条件值时才进行分组

仅当存在前一行具有空值时才向前填充数据框中的一列

用“ groupby”在熊猫中仅取一列的最大值

分层Groupby然后通过Python中的另一列进行值计数

熊猫对值进行排序以使groupby中的每一列排在前5位

Sharepoint 列表列验证:如果某一列中的某个值,则其他列不得为空

仅当另一列的计数大于零时,才从表中选择一列

SQL:仅当在同一行中另一列具有不同的值时,才返回一列的值

SQL Access,仅当另一列中的所有值都在指定范围内时,才求和一列的值

是否存在一条SQL语句,该语句可以针对由groupby另一列产生的每个组返回表中某一列的最大值?

SQL Server:仅当同一表中的另一列是特定值时,才如何强制在一列中使用NOT NULL?

仅当另一列的值满足条件时才获取列的分位数

基于R中另一列的值进行计数

Pandas - 仅当 MULTIPLE COLUMNs 为空时才用另一列的值填充一列

仅当另一列的值为DAX时,PowerBi才计算日期

仅当另一列的值更改SQL Server时才自动增加该值

按时间分组,然后仅当列表中存在唯一条目时才对唯一条目进行计数

熊猫:只要条件持续存在并且某个值出现在另一列中,则为该列分配值

如何读取文本文件,仅打印某一列中的值高于阈值的特定行?

仅当值存在时,才通过vlookup另一个数据框替换列中的值

仅当一列中的值相同时,才遍历DataFrame中的行并执行diff方法

如何使用groupby从某个列中获取第n个最大值并对同一行的另一列进行计算