如何在pandas数据框中仅计算特定值的数量

4

I have the following pandas dataframe;

a = [['01', '12345', 'null'], ['02', '78910', '9870'], ['01', '23456', 'null'],['01', '98765', '8760']]

df_a = pd.DataFrame(a, columns=['id', 'order', 'location'])

我需要计算每个ID中出现的NULL值(NULL是一个字符串)的数量。因此,结果应如下所示:
id   null_count
01    02

我可以使用groupby获取基本计数:

new_df = df_a.groupby(['id', 'location'])['id'].count()

但是结果返回的不仅仅是NULL值;

id  location
01  8760        1
    null        2
02  9870        1
3个回答

6

因为在你的源数据框中,NULL值是字符串'null',所以请使用以下代码:

df_a.groupby('id')['location'].apply(lambda x: (x=='null').sum())\
    .reset_index(name='null_count')

输出:

   id  null_count
0  01          2
1  02          0

或者

df_a.query('location == "null"').groupby('id')['location'].size()\
    .reset_index(name='null_count')

输出:

   id  null_count
0  01           2

我祝你圣诞快乐!并感谢您的支持,这是一个小礼物送给你(3+)。祝好运! - jezrael

5

基于您自己的代码,添加.loc来指示这是多重索引切片。

df_a.groupby(['id', 'location'])['id'].count().loc[:,'null']
Out[932]: 
id
01    2
Name: id, dtype: int64

4
In [16]: df_a.set_index('id')['location'].eq('null').sum(level=0)
Out[16]:
id
01    2.0
02    0.0
Name: location, dtype: float64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接