Так как броски явно легальны и верный способ выполнения странных преобразований, очень маловероятно, что gcc будет содержать опцию для предупреждения о них
. Вместо этого, в зависимости от того, насколько огромный ваш источник, вы можете уметь уйти с:
grep '\(double|float\) ' *
, чтобы дать вам все двойные или плавающие переменные. Так как c не является обычным языком, нет тривиального (с инструментами оболочки) для его синтаксического анализа в список двойных или плавающих переменных, но если ваш источник достаточно мал, сделать это вручную легко.
grep '([^()]*)[ ()]*\(your list of variable names\)' *
Оттуда вы увидите много ваших приемов.
Это позволит отсортировать значения по дате (с сохранением последнего значения), суммировать ваши логические значения «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
Вы можете попробовать это:
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
Подробности:
И, вы можете сделать переименование столбца с помощью 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