2017-08-23 4 views
1

Given dataframe.mise à jour la valeur de la colonne de pandas géants groupby() dernier()

dfd = pd.DataFrame({'A': [1, 1, 2,2,3,3], 
        'B': [4, 5, 6,7,8,9], 
        'C':['a','b','c','c','d','e'] 
        }) 

je peux trouver la dernière valeur C de chacun un groupe en utilisant

dfd.groupby('A').last()['C'] 

Cependant, je veux mettre à jour les valeurs C à np.nan. Je ne sais pas comment faire ça. Méthode telle que:

def replace(df): 
    df['C']=np.nan 
    return replace 

dfd.groupby('A').last().apply(lambda dfd: replace(dfd)) 

Ne fonctionne pas.

Je veux le résultat comme:

dfd_result= pd.DataFrame({'A': [1, 1, 2,2,3,3], 
        'B': [4, 5, 6,7,8,9], 
        'C':['a',np.nan,'c',np.nan,'d',np.nan] 
        }) 

Répondre

3

IIUIC, vous avez besoin loc. Obtenez l'index des dernières valeurs en utilisant tail

In [1145]: dfd.loc[dfd.groupby('A')['C'].tail(1).index, 'C'] = np.nan 

In [1146]: dfd 
Out[1146]: 
    A B C 
0 1 4 a 
1 1 5 NaN 
2 2 6 c 
3 2 7 NaN 
4 3 8 d 
5 3 9 NaN 

dfd.loc[dfd.groupby('A').tail(1).index, 'C'] = np.nan devrait être bien aussi.

+0

Veuillez voir mon exemple mis à jour, où la colonne C ne contient pas de nombres. –

+0

Merci. Je pense que vous avez changé le code de façon très légère. Je vais essayer plus tard et vous dire le résultat. –