Код: Выделить всё
df = pd.DataFrame({'x': ['A', 'B', 'B', 'C', 'C', 'C', 'D', 'D'],
'y': [None, None, 1, 2, 3, 4, None, None]})
x y
0 A NaN
1 B NaN
2 B 1.0
3 C 2.0
4 C 3.0
5 C 4.0
6 D NaN
7 D NaN
- только строки, где y не имеет значения None, если существуют какие-либо ненулевые значения
- одну строку для представления x в случае, если все y равны None
Вот один из подходов:
Код: Выделить всё
pd.concat([
df.groupby('x').filter(lambda x: any(x['y'].notna())).dropna(),
df.groupby('x').filter(lambda x: all(x['y'].isna())).drop_duplicates()
])
x y
2 B 1.0
3 C 2.0
4 C 3.0
5 C 4.0
0 A NaN
6 D NaN
Код: Выделить всё
df.loc[df['y'].notna()].merge(df[['x']].drop_duplicates(),
on='x', how='outer')
x y
0 A NaN
1 B 1.0
2 C 2.0
3 C 3.0
4 C 4.0
5 D NaN
Подробнее здесь: https://stackoverflow.com/questions/798 ... m-else-kee
Мобильная версия