根据条件,在另一个数据帧列上,按组计算缺失值数量。

3

假设我有以下数据:

df=pd.DataFrame({"id":[1,1,1,2,2,3,4],
             "date":[2019,2019,2020,2020,2020,2020,2021],
             "subgroup":["con","ind","ind","con","ind","ind","ind"],
             "value":[1,None,2,None,1,3,4]})

我想按照ID和日期分组,然后在那些重复项中,获取一个列,该列根据Subgroup列中的值(在此情况下,当Subgroup ==“Ind”时)计算Value列中缺失值的数量。 输出如下:
id      date    subgroup   value  count
1       2019      con      1       1
1       2019      ind      None    1
1       2020      ind      2       0
2       2020      con      None    0
2       2020      ind      1       0
3       2020      ind      3       0
4       2021      ind      4       0

我该如何实现这个目标?

2个回答

1
df['counter'] = 0
df.loc[(df.subgroup=='ind') & (df.value.isna()), 'counter'] = 1
df['goal'] = df.groupby(["id","date"])['counter'].transform('sum') 
df = df.drop(columns='counter')

但是正如Alollz指出的那样,你的示例代码并没有生成你的示例数据框。

2
如果您想避免辅助列的维护,您可以直接对布尔掩码进行分组并分配结果:df['count'] = (df['value'].isnull() & df['subgroup'].eq('ind')).groupby([df['id'], df['date']]).transform('sum') - ALollz

0

你需要定位子组等于'ind'的行,然后按如下方式对值列中的isnull()求和:

new_df = df.loc[df['subgroup'] == 'ind']
lst = []
nans = new_df['value'][i].isnull().sum()

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