2016-06-14 64 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

請檢查@斯蒂芬的解決方案,我認爲這是一個很好的起點... – 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