Сортируйте фрейм данных по месяцам и найдите первое ненулевое значение в каждом столбце для каждого месяца. - PullRequest
1 голос
/ 14 февраля 2020

Мне нужно загрузить CSV с 200 столбцами, первый столбец - это дата, в pandas фрейм данных в python. Мне нужно отсортировать данные и вернуть первое ненулевое значение для каждого месяца. Должен ли я делать отдельные кадры данных или каждый месяц, а затем искать? Как лучше всего подойти к этой проблеме?

df = pd.read_csv('loaddata.csv')
df['DATE'] = pd.to_datetime(df['DATE'], format='%m/%d/%Y')
df['Month']= pd.DatetimeIndex(df['DATE']).month


THe data looks like this:

Date    Data_1   Data_2  Data_3
1/d/y    0         0       1
2/d/y    0         1       2
3/d/y    2         6       0
1/d/y    5         3       45
2/d/y    20        7       90
3/d/y    25        12      18


Returns: 
      Data_1   Data_2   Data_3
Jan     5         3       1
Feb     20        7       2
Mar     2         6       18

1 Ответ

0 голосов
/ 14 февраля 2020

Вы получили ошибку для 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
...