2013-08-11 4 views
22

У меня есть кадр данных df1 с несколькими столбцами и строками. Простой пример:Создайте пустой кадр данных с индексом из другого фрейма данных

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

Я хотел бы создать пустой кадр данных df2 и в дальнейшем, добавлять новые столбцы с результатами расчетов.

На данный момент мой код выглядит следующим образом:

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

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

... добавив две новые колонки:

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

Есть ли лучше/безопаснее/быстрее способ сделать это? Возможно ли создать пустой фрейм данных df2 и только скопировать индекс из df1?

ответ

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

Это создаст DataFrame без столбцов, а будет только индексом, и он будет тем же самым индексом, что и в df1.

+0

Это лучше множество индексов, как df1.index. копия(); в противном случае df1 и df2 будут использовать один и тот же объект индекса. – waitingkuo

+2

Индексы неизменны именно по этой причине. –

+3

Пока вы устанавливаете df2.index.name = 'test', индекс df1 также получит имя. – waitingkuo

2

Это лучше установить индекс как df1.index.copy()

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

Вы можете использовать df1.index является df2.index, чтобы проверить, являются ли они тот же объект

+5

Это не так, вы просто сделайте ненужную копию индекса. По этой причине индексы неизменны - чтобы иметь возможность делиться ими между различными структурами данных, не опасаясь, что они изменятся. –

Смежные вопросы