如果组中至少有一个满足条件,则将虚拟值分配给整个组

时间:2020-08-24 06:47:57

标签: python pandas group-by pandas-groupby

具体来说,我想为一个虚拟变量确定某个组是否缺少值。 我的数据框如下所示:

id    cash   dummy_missing
1     5      0
1     5      0
1     5      0
2     2      0
2     NaN    1

它应该看起来像这样:

id    cash    dummy_missing
1     5      0
1     6      0
1     7      0
2     2      1
2     NaN    1

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用NaNs检查isnagroupby id并使用any进行变换:

df['dummy_missing'] = df.cash.isna().groupby(df['id']).transform('any').view('i1')

print(df)
   id  cash  dummy_missing
0   1   5.0              0
1   1   5.0              0
2   1   5.0              0
3   2   2.0              1
4   2   NaN              1

答案 1 :(得分:2)

Series.isin用于测试id,如果缺少cash值,则将布尔掩码转换为整数,以将映射True, False转换为1,0: >

df['dummy_missing'] = df['id'].isin(df.loc[df.cash.isna(), 'id']).astype(int)
print (df)
   id  cash  dummy_missing
0   1   5.0              0
1   1   5.0              0
2   1   5.0              0
3   2   2.0              1
4   2   NaN              1