我有一个超过1000个数据帧的字典(df_dict),其中一些元素可能是系列:
SELECT
我如何以一般方式选择性地水平连接串行数据框(例如(1 of 2)和(2 of 2))?我知道如何针对特定情况执行该功能,但是当数据可能随时间变化时,我需要一些通用的东西。
答案 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()
。