连接DataFrame系列的通用脚本

时间:2016-06-14 13:46:33

标签: python dictionary pandas dataframe concatenation

我有一个超过1000个数据帧的字典(df_dict),其中一些元素可能是系列:

SELECT

我如何以一般方式选择性地水平连接串行数据框(例如(1 of 2)和(2 of 2))?我知道如何针对特定情况执行该功能,但是当数据可能随时间变化时,我需要一些通用的东西。

1 个答案:

答案 0 :(得分: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()