Pandas 熊猫计数一列中的实例数和另一列中的groupby数
我想使用pandas在我的数据帧上运行一个查询,以计算0在“Days”列、在“SUPPLY_CNT”和groupby“id”列中出现的次数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
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