Pandas groupby: как заменить значение в каждой группе? - PullRequest
0 голосов
/ 27 сентября 2019

После нескольких манипуляций с данными я слил два csv-файла, используя pandas, и это закончилось примерно так:

ID;Age;Year;Income
3214;78;2016;76000
3214;78;2015;76500
3214;78;2014;76511
1598;59;2014;58989
1598;59;2013;57800
1598;59;2012;56500

7771;68;2017;89100
7771;68;2016;88700

Это сгруппировано по ID, и мой желаемый результат выглядит так:

ID;Age;Year;Income
3214;78;2016;76000
3214;77;2015;76500
3214;76;2014;76511
1598;59;2014;58989
1598;58;2013;57800
1598;57;2012;56500
7771;68;2017;89100
7771;67;2016;88700

Вот мой код.Однако это не работает.Любая помощь будет оценена!

df = pd.read_csv('sample.csv')
print(df)

#cols to replace values for
cols = ['Age']

final = pd.DataFrame()


for key, grp in df.groupby(['ID']):
    idx = df.groupby('ID').Year.transform('idxmax')

    if grp.loc[grp['Year'] == grp['Year'].max()]:
        df.iloc[idx].reset_index(drop=True).assign(**{'Age' : df.Age, 'Income' : df.Income})
    else:
        #max values based on year
        replace = grp.loc[grp['Year'] == grp['Year'].max()]

        #replace the values
        for col in cols:
            grp[col] = replace[col]-1  

    #append the values
    final = final.append(grp)
print(final)

кредит Стефано

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...