你可以使用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()
代替。
你在問題中列出的元素 - 他們是'df_dict'的關鍵嗎? – MaxU
是的,他們是df_dict的關鍵 –
請檢查@斯蒂芬的解決方案,我認爲這是一個很好的起點... – MaxU