2013-08-11 17 views
22

Mam ramkę danych df1 z wieloma kolumnami i wierszami. Prosty przykład:Utwórz pustą ramkę danych z indeksem z innej ramki danych

TIME T1 T2 
     1 10 100 
     2 20 200 
     3 30 300 

Chciałbym utworzyć pustą ramkę danych df2 a później dodać nowe kolumny z wynikami obliczeń.

W tym momencie mój kod wygląda następująco:

 df1=pd.read_csv("1.txt",index_col="TIME") 

    df2=df1.copy()[[]] #copy df1 and erase all columns 

... dodając dwie nowe kolumny:

 df2["results1"],df2["results2"]=df1["T1"]*df["T2"]*3,df1["T2"]+100 

Czy istnieją jakieś lepsze/bezpieczniejsze/szybszy sposób to zrobić? Czy można utworzyć pustą ramkę danych df2 i kopiować tylko indeks z df1?

Odpowiedz

33
df2 = pd.DataFrame(index=df1.index) 

Spowoduje to utworzenie DataFrame bez kolumn, a jedynie indeks i będzie to ten sam indeks co w df1.

+0

Lepiej wskaźnik zestaw jak df1.index. Kopiuj(); w przeciwnym razie df1 i df2 będą dzielić ten sam obiekt indeksu – waitingkuo

+2

Indeksy są niezmienne dokładnie z tego powodu. –

+3

Podczas ustawiania df2.index.name = 'test', indeks df1 również otrzyma nazwę. – waitingkuo

2

Lepiej ustawić indeks jako df1.index.copy()

df2 = pd.DataFrame(index=df1.index.copy()) 

Można użyć df1.index jest df2.index, aby sprawdzić, czy są one ten sam przedmiot

+5

To nie jest, po prostu utworzyć niepotrzebną kopię indeksu. Indeksy są niezmienne właśnie z tego powodu - aby móc je udostępniać w różnych strukturach danych bez obawy, że się zmienią. –

Powiązane problemy