2015-12-23 8 views
1

Я построил DataFrame из словаря Python, с помощью следующей команды:конкатенации/Объединение фреймов данных и редактирование имен столбцов - Python/Панды

population=pd.DataFrame(population.items(),columns=['Date','population']).set_index('Date').sort_index(ascending=True) 

Это дало мне следующий кадр population:

    population 
Date      
2015-08     69 
2015-09     65 
2015-10     65 
2015-11     66 
2015-12     71 

из этого DataFrame я создал еще один с его скользящей средней, используя следующую команду:

population_movav=pd.rolling_mean(population,10) 

Это дало мне следующий кадр population_movav:

    population 
Date      
2015-08    68.0 
2015-09    69.9 
2015-10    71.6 
2015-11    71.1 
2015-12    71.2 

Я хочу, чтобы объединить их, чтобы они получают так:

   population population_movav 
Date      
2015-08     69    68.0 
2015-09     65    69.9 
2015-10     65    71.6 
2015-11     66    71.1 
2015-12     71    71.2 

синтезирующий, мне нужно объединить их и изменить имя столбца переменной population_movav. Пробовал pd.concat, но по какой-то причине он не работает правильно.

Может кто-нибудь светить на него?

ответ

2

Вы должны использовать pd.concat с axis=1, а затем переименовать последний столбец «population_movav»:

In [27]: df1 
Out[27]: 
     population 
Date    
2015-08   69 
2015-09   65 
2015-10   65 
2015-11   66 
2015-12   71 

In [28]: df2 
Out[28]: 
     population 
Date    
2015-08  68.0 
2015-09  69.9 
2015-10  71.6 
2015-11  71.1 
2015-12  71.2 

In [30]: df3 = pd.concat([df1, df2], axis=1) 

In [31]: df3.columns = ['population', 'population_movav'] 
Out[31]: 
     population population_movav 
Date       
2015-08   69  68.0 
2015-09   65  69.9 
2015-10   65  71.6 
2015-11   66  71.1 
2015-12   71  71.2 

EDIT

Если вам нужно изменить только последний столбец можно сделать следующее:

df3.columns = df3.columns[:-1].tolist() + ['population_movav'] 
+0

могли бы вы добавлять переименовании команды для последнего столбца ? – abutremutante

1

Вы можете использовать join с rsuffix :

print population 
      population 
Date     
2015-08-01   69 
2015-09-01   65 
2015-10-01   65 
2015-11-01   66 
2015-12-01   71 

print population_movav 
      population 
Date     
2015-08-01  68.0 
2015-09-01  69.9 
2015-10-01  71.6 
2015-11-01  71.1 
2015-12-01  71.2 

p = population.join(population_movav, rsuffix="_movav") 
print p 
      population population_movav 
Date          
2015-08-01   69    68.0 
2015-09-01   65    69.9 
2015-10-01   65    71.6 
2015-11-01   66    71.1 
2015-12-01   71    71.2 
1

Вы можете добавить новый столбец, просто ссылаться на него по имени в назначении:

population['population_movav'] = pd.rolling_mean(population, 2, 1) 

Дает

  population population_movav 
Date 
2015-08   69    69.0 
2015-09   65    67.0 
2015-10   65    65.0 
2015-11   66    65.5 
2015-12   71    68.5 
+0

Если это работает, это лучший ответ. Mayby вы можете изменить имя столбца на 'population_movav' – jezrael

+0

Я отредактировал ярлык в соответствии с примером – pneumatics

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