2016-03-19 7 views
3

Ich versuche, einige Daten zu aktualisieren, aber die Daten, die ich aktualisieren muss, sind Teil der Spalten, die ich verwenden muss, um die eindeutigen Datensätze auszuwählen.Python/Pandas - Aktualisieren von Daten für eine Gruppe von Datensätzen

import pandas as pd 

data = [{'subid':'123','grade':'K'},{'subid':'123','grade':'3rd'}, {'subid':'123','grade':'6th'}, {'subid':'456','grade':'1st'},{'subid':'456','grade':'3rd'},{'subid':'456','grade':'5th'}] 
df = pd.DataFrame(data) 
df 

Ich versuche str.replace

df['grade'][df['subid']== '456'].str.replace('3rd','4th') 

Ich erhalte die folgenden zu verwenden, aber kann die df nicht bekommen zu aktualisieren.

3 1st 
4 4th 
5 5th 
Name: grade, dtype: object 

df 
    grade  subid 
0 K  123 
1 3rd  123 
2 6th  123 
3 1st  456 
4 3rd  456 
5 5th  456 

Der Versuch, die folgenden als letzte df

grade  subid 
0 K  123 
1 3rd  123 
2 6th  123 
3 1st  456 
4 4th  456 
5 5th  456 

Gibt es bessere Ansätze zur Aktualisierung zu bekommen?

Antwort

3

versuchen Sie dies:

In [138]: df.loc[df['subid']== '456', 'grade'] = df.grade.replace({'3rd':'4th'}) 

In [139]: df 
Out[139]: 
    grade subid 
0  K 123 
1 3rd 123 
2 6th 123 
3 1st 456 
4 4th 456 
5 5th 456 
1

Sie können dies tun mit einer komplexeren Auswahl von Zeilen und der Zuweisungsoperator:

#!/usr/bin/python 

import pandas as pd 

data = [{'subid':'123','grade':'K'},{'subid':'123','grade':'3rd'}, {'subid':'123','grade':'6th'}, {'subid':'456','grade':'1st'},{'subid':'456','grade':'3rd'},{'subid':'456','grade':'5th'}] 
df = pd.DataFrame(data) 
print df 

df['grade'][(df['subid']== '456') & (df['grade'] == '3rd')] = '4th' 
print df 

Dies gibt:

grade subid 
0  K 123 
1 3rd 123 
2 6th 123 
3 1st 456 
4 3rd 456 
5 5th 456 

[6 rows x 2 columns] 
    grade subid 
0  K 123 
1 3rd 123 
2 6th 123 
3 1st 456 
4 4th 456 
5 5th 456 

[6 rows x 2 columns] 
Verwandte Themen