2017-09-26 2 views
0

Je suis aller chercher la première occurrence d'une valeur particulière dans une colonne Panda en fonction de son index, comme indiqué ci-dessous:Python Pandas - Remplacer les valeurs d'une partie de la colonne de trame de données basée sur l'indice

first_idx = df1.loc[df1.Column1.isin(['word1','word2'])].index.tolist()[0] 

Cela donnera moi l'indice de la première occurrence soit « mot1 » ou « mot2 »

Alors je remplace les anciennes valeurs des enregistrements jusqu'à ce que l'indice déterminé avec de nouvelles valeurs comme indiqué ci-dessous:

df1.head(first_idx)['Column1'].replace({'10': '5'}, inplace=True) 

Ceci remplacera tous les '10 qui sont présents jusqu'au premier_idx de l'ensemble de données avec' 5 '. Tous les '10 restants après la valeur first_idx ne seront pas remplacés.

Maintenant, je dois remplacer tous les '10 présents après la valeur first_idx avec' 3's. J'ai essayé ci-dessous en calculant la longueur de la trame de données et en la soustrayant ensuite avec la valeur first_idx.

len(df1)       # This will show the actual length/total number of records of a dataframe column. 
temp = (len(df1)-first_idx)-1 # This will determine the remaining count of records barring the count of records until first_idx value. 
df1.tail(temp)     # This will show all records that are present after the first_idx value. 
df1.tail(temp)['Column1'].replace({'10': '3'}, inplace=True) 

Mais y a-t-il une autre façon de faire la même chose?

Répondre

1

De la façon dont vous avez utilisé

df1.head(first_idx) 

Je suppose que vos indices sont numériques. Ainsi, un simple

df1.iloc[first_idx + 1:, :]['Column1'].replace({'10': '3'}, inplace=True) 

Devrait faire.

+0

Merci @Eran. Ça marche. mais j'ai essayé la même chose avec df1.loc. Il fait aussi le même travail. Si possible, pouvez-vous s'il vous plaît expliquer quelle est la différence entre les deux car les deux obtiennent les mêmes résultats? – JKC

+0

Sure @JKC. Iloc est utilisé pour les numéros de ligne réels. df1.iloc [2: 4] découpera les lignes 2 et 3, quels que soient leurs indices. localisez les tranches en utilisant les indices de votre base de données. Ils peuvent être des nombres ou des non-nombres. Si vos indices sont des nombres ordonnés (comme dans votre cas), les deux auraient exactement le même comportement. Lisez aussi à propos de df.idx [] qui combine les deux. Je ne l'utilise pas beaucoup cependant, je préfère la manière plus explicite de loc et iloc. – Eran