'Groupby and create a dummy =1 if column values do not contain 0, =0 otherwise
My df
id var1
A 9
A 0
A 2
A 1
B 2
B 5
B 2
B 1
C 1
C 9
D 7
D 2
D 0
..
desired output will have a dummy =1 if only var1 contains non-zeros, =0 otherwise.
id var1
A 0
B 1
C 1
D 0
Solution 1:[1]
There are many ways, one could be to clip
to only have 0/1 in the input:
df['var1'].clip(upper=1).groupby(df['id']).min()
# or
# df.groupby('id')['var1'].min().clip(upper=1)
Alternatively, use booleans:
df['var1'].ne(0).groupby(df['id']).all().astype(int)
output:
id
A 0
B 1
C 1
D 0
Name: var1, dtype: int64
for a DataFrame as output add .reset_index(name='var1')
:
id var1
0 A 0
1 B 1
2 C 1
3 D 0
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | mozway |