Вы получили ошибку для Feb
, столбец Data_2
: первый ненулевой номер 1, а не 7.
Вот один из способов сделать это:
def first_non_zero(col):
"""Return the first non-zero value of a column, or nan if the column is all-zero"""
head = col[col != 0].head(1)
return np.nan if head.empty else head.values
df.groupby('Month').apply(lambda group: group[['Data_1', 'Data_2', 'Data_3']].apply(first_non_zero)) \
.reset_index(level=1, drop=True)
Результат:
Data_1 Data_2 Data_3
Month
1 5 3 1
2 20 1 2
3 2 6 18