【问题标题】:General Script to Concatenate Series of DataFrames连接一系列数据帧的通用脚本
【发布时间】:2016-06-14 13:46:32
【问题描述】:

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

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)

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

【问题讨论】:

  • 您在问题中列出的元素 - 它们是 df_dict 的键吗?
  • 是的,它们是df_dict的键
  • 请查看@Stefan 的解决方案,我认为这是一个很好的起点...

标签: python dictionary pandas dataframe concatenation


【解决方案1】:

你可以使用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()

【讨论】:

  • 成功了,非常感谢。非常感谢您的帮助。
猜你喜欢
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 2020-03-31
  • 2020-01-16
  • 2018-06-11
  • 1970-01-01
相关资源
最近更新 更多