【问题标题】:Splitting a big dataframe into multiple dataframes将大数据框拆分为多个数据框
【发布时间】:2019-11-21 09:44:08
【问题描述】:

我有一个发电厂列表,我将它们拆分为 for 循环并进行一些这样的过程。

list_of_pp = [v for k, v in pp_data.groupby('filename')]
        dataframes = pd.DataFrame()
        for pp in list_of_pp:
            pp = pp.groupby(['Date', 'filename']).sum().reset_index().set_index('Date').reindex(YF_date_range)
            pp['filename'] = pp['filename'].replace('', np.nan).ffill().bfill()
            pp.fillna(0, inplace = True)
            dataframes = dataframes.append(pp)


Output:

Date                filename     teklifId    fiyat miktar       SST      SAT
2019-11-10 00:00:00  bergama    205379348   620,68  -3,4    1055,15        0
2019-11-10 01:00:00  bergama    205385090   622,18  -2,9    902,161        0
2019-11-10 02:00:00  bergama    205392261   622,24  -0,8    248,896        0
2019-11-10 03:00:00  bergama    205398901   559,78  -0,6    307,879   -139,9
2019-11-10 04:00:00  bergama    205407003   559,98  -1,9    615,978   -83,99
2019-11-10 05:00:00  bergama    205414086   620,38  -2,8    1147,70   -279,1
2019-11-10 06:00:00  bergama    205420617   630,24  -2,9    913,848        0
2019-11-10 07:00:00  bergama    205426123   623,28  -2,6    1184,23   -373,9
2019-11-10 08:00:00  bergama    205432679   397,98    -4     795,96        0
2019-11-10 09:00:00  bergama    205440561      336 -10,3     1730,4        0
2019-11-10 10:00:00  bergama    205450946      400 -10,9       2180        0
2019-11-10 11:00:00  bergama    205460808      350  -3,5     1242,5     -630
2019-11-10 12:00:00  bergama    205468765   335,98  -2,5    587,965  -167,99
2019-11-10 13:00:00  bergama    205476320   335,98    -1    419,975  -251,98
2019-11-10 14:00:00  bergama    205482691   396,92  -1,2    238,152        0
2019-11-10 15:00:00  bergama    205488983      336   2,7          0     -453
2019-11-10 16:00:00  bergama    205495848    592,3     6          0    -1776
2019-11-10 17:00:00  bergama    205503077    623,9   5,6     218,36    -1965
2019-11-10 18:00:00  bergama    205511694    653,8     5     424,97    -2059
2019-11-10 19:00:00  bergama    205520491    656,9   1,3     164,22   -591,2
2019-11-10 20:00:00  bergama    205531685   650,98  -0,1     585,88   -553,3
2019-11-10 21:00:00  bergama    205545909    643,5  -1,1     804,37   -450,4
2019-11-10 22:00:00  bergama    205557633    638,2     4          0    -1276
2019-11-10 23:00:00  bergama    205567413    622,9   0,3     685,25   -778,7
2019-11-10 00:00:00  irmak      102689118    310,3    -1     310,34        0
2019-11-10 01:00:00  irmak              0        0     0          0        0
2019-11-10 02:00:00  irmak              0        0     0          0        0
2019-11-10 03:00:00  irmak      102699101   279,89  -0,6          1        0
                                      .
                                      .
                                      .
2019-11-10 23:00:00 tekirdag    302699101        0     0          0        0

每个文件名代表一个发电厂,每个发电厂数据都有相同的索引('2019-11-10 00:00:00' 到 '2019-11-10 23:00:00'),但它们组合在一起顶部和底部。此数据框中有近 50 个发电厂,我想将它们拆分为文件名。我想访问这些数据框。

例如: 当我打印“bergama”时,我只想看到一个包含 bergama 信息的数据框。

由于在 for 循环中创建了这个大数据框,我无法为小数据框指定名称,因此我无法在 for 循环后调用。因此,我不得不合并这些数据。我认为在这种情况下可能更有可能将其分开。

我该怎么做才能拆分此数据框并为其分配名称?

【问题讨论】:

  • 所以如果是 IIUC,你想用filename 分割并创建一个数据框字典来访问?
  • 试试dict(list(dataframes.groupby('filename')))
  • 我认为最好的解决方案是这个,谢谢!

标签: python pandas split


【解决方案1】:

据我了解,您在一个数据框中拥有发电厂的所有记录,现在您想按名称访问单个电厂,该名称位于功能文件名中?

您可以访问那些单一发电厂的专栏,例如'bergama',简单地说:

print(df[df.filename=='bergama'])  

此外,这个问题已被多次提出。有人可以标记它吗?

【讨论】:

  • 我知道这种方式,但我不想为 50 座发电厂这样做,无论如何谢谢 :)
  • 使用df.groupby('filename')
【解决方案2】:
  1. 从文件名列中获取唯一值并存储在列表或集合中。 (dataframe.filename.unique) 2.传递列表中的每个值或设置以获取单独的文件。

另一个观察结果:

(0-23-> bergama, 24-48-irkmax 等等) 1.使用索引获取每个动力装置的单独文件。(使用for循环,step=23,initial=0,final=50*23)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多