Pandas 熊猫计数一列中的实例数和另一列中的groupby数

Pandas 熊猫计数一列中的实例数和另一列中的groupby数,pandas,Pandas,我想使用pandas在我的数据帧上运行一个查询,以计算0在“Days”列、在“SUPPLY_CNT”和groupby“id”列中出现的次数 Example Dataframe ID | Days | SUPPLY_CNT | -----------------------------| | 1561 | -11 | 15 | | 1561 | 0 | 05 | | 1561 | 44 | 11 | | 1561

我想使用pandas在我的数据帧上运行一个查询,以计算0在“Days”列、在“SUPPLY_CNT”和groupby“id”列中出现的次数

Example Dataframe

   ID   |  Days | SUPPLY_CNT |
-----------------------------|
| 1561  |  -11  |     15     |
| 1561  |    0  |     05     |
| 1561  |   44  |     11     |
| 1561  |    0  |            |
| 1561  |    0  |     24     |
| 1561  |   56  |     24     |
| 1561  |    0  |     19     |
| 1561  |   92  |     21     |
| 2412  |  -789 |     09     |
| 2412  |  -456 |     09     |
| 2412  |  -321 |     31     |
| 2412  |    0  |            |
| 2412  |   99  |     32     |
| 2412  |    0  |     14     |
| 2412  |    0  |     18     |
| 7848  |   451 |     11     |
| 7848  |   3222|     21     |
| 7848  |    0  |     12     |
------------------------------

Expected Output:

1561     3
2412     2
7848     1

我有此查询,但需要按“id”分组

(df.loc[(df['Days'] == 0) & (df['PAY_DAY_SUPPLY_CNT'].notnull())])

这里我们首先取
值为
0
SUPPLY\u CNT
为数字的行。然后我们在这上面做群比

df.loc[(df['Days'] == 0) & ((df['SUPPLY_CNT'].notna()))].groupby('ID')['Days'].count()
输出

ID
1561    3
2412    2
7848    1

我想这会帮你的

df[df['Days']==0].groupby('ID')[['Days']].count().rename(columns = {"Days": "Count"})

为测试
0
值创建掩码,并将其转换为
整数
s:

m = ((df['Days'] == 0) & df['SUPPLY_CNT'].notna()).astype(int)
对于计数聚合
总和

df1 = m.groupby(df['ID']).sum().reset_index(name='count')
print (df1)

     ID  count
0  1561      3
1  2412      2
2  7848      1
对于
系列

s = m.groupby(df['ID']).sum()
print (s)
ID
1561    3
2412    2
7848    1
dtype: int32

我想你明白我的意思了-谢谢。但它确实返回了这个错误:
只能使用带有字符串值的.str访问器,它在pandas中使用np.object\dtype
我将它改回了
.notnull()
,它成功了。我知道您尝试了另一种方法,但是否有原因
。notnull()
不是一种好方法?
s = m.groupby(df['ID']).sum()
print (s)
ID
1561    3
2412    2
7848    1
dtype: int32