как выполнить такую ​​агрегацию панд: отбросить нан и соединить с первым? - PullRequest
2 голосов
/ 11 октября 2019

Вход:

df = pd.DataFrame({
         'a':['1',np.nan,np.nan, '2',np.nan,np.nan],
         'b':['a',np.nan,'ddd',np.nan,'d','gg'],
         'c':[np.nan,'aa','bb',np.nan,'d',np.nan],

})
print (df)
     a    b    c
0    1    a  NaN
1  NaN  NaN   aa
2  NaN  ddd   bb
3    2  NaN  NaN
4  NaN    d    d
5  NaN   gg  NaN

Выход:

   a      b      c
0  1  a ddd  aa bb
1  2   d gg      d

1 Ответ

2 голосов
/ 11 октября 2019

Если для начала каждой группы нет пропущенных значений, используйте ffill для прямого заполнения пропущенных значений и агрегируйте все значения с join и удалили пропущенные значения:

df = df.groupby(df['a'].ffill()).agg(lambda x: ' '.join(x.dropna())).reset_index(drop=True)
print (df)
   a      b      c
0  1  a ddd  aa bb
1  2   d gg      d

Detail :

print (df['a'].ffill())
0    1
1    1
2    1
3    2
4    2
5    2
Name: a, dtype: object
...