Получение последнего значения от группы в пандах

Так как броски явно легальны и верный способ выполнения странных преобразований, очень маловероятно, что gcc будет содержать опцию для предупреждения о них

. Вместо этого, в зависимости от того, насколько огромный ваш источник, вы можете уметь уйти с:

grep '\(double|float\) ' *

, чтобы дать вам все двойные или плавающие переменные. Так как c не является обычным языком, нет тривиального (с инструментами оболочки) для его синтаксического анализа в список двойных или плавающих переменных, но если ваш источник достаточно мал, сделать это вручную легко.

grep '([^()]*)[ ()]*\(your list of variable names\)' *

Оттуда вы увидите много ваших приемов.

3
задан user9695260 27 February 2019 в 15:11
поделиться

2 ответа

Это позволит отсортировать значения по дате (с сохранением последнего значения), суммировать ваши логические значения «True» и затем удалить дубликаты в индексе. Затем он избавится от ненужных вам столбцов и выдаст вам ваш 'new_df':

df = pd.read_table('fun.txt')
df['pastDuebool'] = df['AmountPastDue'] > 0

df = df.set_index('DebtorID').sort_values('AccountRatingDate')
df['Incidents of Delay'] = df.groupby('DebtorID')['pastDuebool'].sum()
df = df[~df.index.duplicated(keep='last')]

df = df.drop(['pastDuebool', 'AccountRatingDate', 'AccountRating'], axis=1)
new_df = df.rename(columns={'AmountOutstanding':'TheMostRecentOutstanding',
                            'AmountPastDue':'TheMostRecentPastDue'})

print(new_df)

вывод:

                 AmountOutstanding  AmountPastDue  Incidents of Delay
DebtorID
SarahParker                  0              0                 0.0
EdwardHall                   0              0                 0.0
DouglasCore               1000            400                 2.0
JohnSnow                  6000            300                 2.0
0
ответ дан d_kennetz 27 February 2019 в 15:11
поделиться

Вы можете попробовать это:

df.sort_values('AccountRatingDate')\
  .query('AccountRating == "Delayed"')\
  .groupby('Debtor ID')[['AccountRating','AmountOutstanding','AmountPastDue']]\
  .agg({'AccountRating':'count',
        'AmountOutstanding':'last',
        'AmountPastDue':'last'})\
  .reindex(df['Debtor ID'].unique(), fill_value=0)\
  .reset_index()

Вывод:

      Debtor ID  AccountRating  AmountOutstanding  AmountPastDue
0     John Snow              2               6000            300
1  Sarah Parker              0                  0              0
2   Edward Hall              0                  0              0
3  Douglas Core              2               1000            400

Подробности:

  • Первая сортировка кадра данных по AccountRatingDate, чтобы получить последнюю дату как последняя запись.
  • Отфильтруйте данные только для тех, чьи AccountRatings равны 'Delayed'
  • Идентификатор должника Groupby со столбцами для агрегирования, затем используйте agg со словарем, чтобы указать, как агрегировать каждый столбец
  • Reindex с уникальными значениями идентификатора должника, чтобы заполнить ноль для тех, без каких-либо задержек
  • И, сбросить индекс.

И, вы можете сделать переименование столбца с помощью rename и словаря:

df.sort_values('AccountRatingDate')\
  .query('AccountRating == "Delayed"')\
  .groupby('Debtor ID')[['AccountRating','AmountOutstanding','AmountPastDue']]\
  .agg({'AccountRating':'count',
        'AmountOutstanding':'last',
        'AmountPastDue':'last'})\
  .reindex(df['Debtor ID'].unique(), fill_value=0)\
  .rename(columns={'AccoutRating':'Incidents of delay', 
                   'AmountOutstanding':'TheMostRecentOutstanding',
                   'AmountPastDue':'TheMostRecentPastDue'})\
  .reset_index()

Вывод:

      Debtor ID  AccountRating  TheMostRecentOutstanding  TheMostRecentPastDue
0     John Snow              2                      6000                   300
1  Sarah Parker              0                         0                     0
2   Edward Hall              0                         0                     0
3  Douglas Core              2                      1000                   400
0
ответ дан Scott Boston 27 February 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: