2016-06-14 2 views
0

у меня есть словарь из более чем 1000 dataframes (df_dict), где некоторые элементы могут быть серии:Общие Скрипт Конкатенируйте Серии DataFrames

Schedule_RCL_03312007 

Schedule_RCL_03312008 

Schedule_RCL_03312009 

Schedule_RCL_03312010(1_of_2) 

Schedule_RCL_03312010(2_of_2) 

Schedule_RCL_03312011(1_of_2) 

Schedule_RCL_03312011(2_of_2) 

Schedule_RCL_06302011(1_of_2) 

Schedule_RCL_06302011(2_of_2) 

Как бы я выборочно горизонтально сцепить последовательные DataFrames (например, (1 из 2) и (2 из 2)) в общем виде? Я знаю, как выполнять функцию для конкретной ситуации, но мне нужно что-то общее, когда данные могут меняться со временем.

+0

элементы, которые вы указали в своем вопросе, являются ли они ключами 'df_dict'? – MaxU

+0

Да, это ключи от df_dict –

+0

Пожалуйста, проверьте решение @ Stefan, я думаю, что это хорошая отправная точка ... – MaxU

ответ

2

Вы можете использовать itertools.groupby:

from itertools import groupby 
from operator import itemgetter 
df_names = ['Schedule_RCL_03312007', 'Schedule_RCL_03312008', 'Schedule_RCL_03312009', 'Schedule_RCL_03312010(1_of_2)', 'Schedule_RCL_03312010(2_of_2)', 'Schedule_RCL_03312011(1_of_2)', 'Schedule_RCL_03312011(2_of_2)', 'Schedule_RCL_06302011(1_of_2)', 'Schedule_RCL_06302011(2_of_2)'] 

for key, grp in groupby(sorted([d.split('(') for d in df_names]), key=itemgetter(0)): # use df_dict.keys() instead of df_names 
    frames = ['('.join(f) for f in grp] 
    if len(frames) > 1: 
     print(key, frames) 
     df_dict[key] = pd.concat([df_dict[f] for f in frames], axis=1) 
     [df_dict.pop(key, None) for key in frames] # optional: remove serial frames 

который печатает:

Schedule_RCL_03312010 ['Schedule_RCL_03312010(1_of_2)', 'Schedule_RCL_03312010(2_of_2)'] 
Schedule_RCL_03312011 ['Schedule_RCL_03312011(1_of_2)', 'Schedule_RCL_03312011(2_of_2)'] 
Schedule_RCL_06302011 ['Schedule_RCL_06302011(1_of_2)', 'Schedule_RCL_06302011(2_of_2)'] 

Поскольку вы используете dict, вы могли бы использовать вместо df_dict.keys().

+0

Он работает, спасибо вам большое. Я искренне ценю вашу помощь. –

+0

Добро пожаловать! – Stefan

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