2016-04-01 11 views
1

Sagen Sie bitte einen Datenrahmen wie die haben, die (man beachte, dass einige Spalten denselben Namen haben) folgt:Python Pandas Datenrahmen: Wie Operationen auf zwei Spalten mit dem gleichen Namen führen

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcab')) 

Die Frage Wenn Sie einige Operationen an den beiden Spalten 'a' ausführen wollen, wie machen Sie das, da sie denselben Namen haben? Ich habe versucht, die replace() - und rename() -Methode zu verwenden, um eine der beiden Spalten umzubenennen und dann einige Operationen auszuführen, aber das habe ich nicht in nur einer Spalte geschafft.

+0

Entschuldigung, was Sie hier fragen, wie man die Spaltennamen umbenennt, damit sie einzigartig sind? Wenn dies der Fall ist, können Sie sie wie 'df.columns = list ('abcde')' überschreiben, Sie können 'rename' oder' replace' nicht verwenden, da Ihre Spaltennamen nicht eindeutig sind – EdChum

Antwort

0

Sie iloc verwenden können, wenn Sie nicht wollen, Spalten umbenennen:

import numpy as np 
import pandas as pd 

np.random.seed(0) 
df = pd.DataFrame(np.random.rand(4,5), columns = list('abcab')) 
print df 
      a   b   c   a   b 
0 0.548814 0.715189 0.602763 0.544883 0.423655 
1 0.645894 0.437587 0.891773 0.963663 0.383442 
2 0.791725 0.528895 0.568045 0.925597 0.071036 
3 0.087129 0.020218 0.832620 0.778157 0.870012 
#select first a column 
print df.iloc[:,0] 
0 0.548814 
1 0.645894 
2 0.791725 
3 0.087129 
Name: a, dtype: float64 

#select second a column 
print df.iloc[:,3] 
Name: a, dtype: float64 
0 0.544883 
1 0.963663 
2 0.925597 
3 0.778157 
Name: a, dtype: float64 

#select first a column 
print df['a'].iloc[:,0] 
0 0.548814 
1 0.645894 
2 0.791725 
3 0.087129 
Name: a, dtype: float64 

#select second a column 
print df['a'].iloc[:,1] 
0 0.544883 
1 0.963663 
2 0.925597 
3 0.778157 
Name: a, dtype: float64 

EDIT: Wenn Sie müssen nur Spalten mit demselben Namen umbenennen, verwenden Sie get_loc:

import numpy as np 
import pandas as pd 

np.random.seed(0) 
df = pd.DataFrame(np.random.rand(4,5), columns = list('abbab')) 
print df 
      a   b   b   a   b 
0 0.548814 0.715189 0.602763 0.544883 0.423655 
1 0.645894 0.437587 0.891773 0.963663 0.383442 
2 0.791725 0.528895 0.568045 0.925597 0.071036 
3 0.087129 0.020218 0.832620 0.778157 0.870012 

cols=pd.Series(df.columns) 
for dup in df.columns.get_duplicates(): 
    cols[df.columns.get_loc(dup)]=[dup+'_'+str(d_idx) if d_idx!=0 else dup for d_idx in range(df.columns.get_loc(dup).sum())] 
df.columns=cols 
print df 
      a   b  b_1  a_1  b_2 
0 0.548814 0.715189 0.602763 0.544883 0.423655 
1 0.645894 0.437587 0.891773 0.963663 0.383442 
2 0.791725 0.528895 0.568045 0.925597 0.071036 
3 0.087129 0.020218 0.832620 0.778157 0.870012 
0

Sie sollten in der Lage sein, das Etikett der Spalten zu ändern tun:

df.columns = ['a', 'b', 'c', 'd', 'e'] 
Verwandte Themen