基于pandas中的索引值将一个数据帧分成多个数据帧

2024-05-16 05:45:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df,如下所示:

             DateTime        ModFlow(cfs)     ObsFlow(cfs)  ModVol(f3)   ObsVol(f3)
Event
Event 1     8/15/2016 15:35   11.85926          0           0.039530867   0
Event 1     8/15/2016 10:05   30.05923          0           0.100197433   0
Event 1     8/15/2016 10:00   31.10118          0           0.1036706     0
Event 1     8/15/2016 9:55    32.17444          0           0.107248133   0
Event 1     8/15/2016 4:10    0.6783166      0.5650155      0.002261055   0.001883385
Event 10    6/23/2016 4:35    0.5573569      0.4814242      0.001857856   0.001604747
Event 10    6/23/2016 4:40    0.5536903      0.3544892      0.001845634   0.001181631
Event 10    6/23/2016 4:45    0.5502114      0.368421       0.001834038   0.00122807
Event 10    6/23/2016 4:50    0.5698021      0.501548       0.00189934    0.001671827
Event 10    6/23/2016 4:55    0.7525368      0.879257       0.002508456   0.002930857
Event 11    6/10/2016 8:05    0.6593155      0.6145511      0.002197718   0.002048504
Event 11    6/10/2016 8:10    0.6621117      0.8405573      0.002207039   0.002801858
Event 11    6/10/2016 8:15    0.6578091      0.8173375      0.002192697   0.002724458
Event 11    6/10/2016 8:20    0.6581948      0.871517       0.002193983   0.002905057
Event 12    4/26/2016 22:00   2.307288       2.588235       0.00769096    0.00862745
Event 12    4/26/2016 22:05   2.366998       3.091331       0.007889993   0.010304437
Event 12    4/26/2016 22:10   2.494073       3.278638       0.008313577   0.010928793
Event 12    4/26/2016 22:15   2.746868       3.083591       0.009156227   0.010278637
Event 12    4/26/2016 22:20   3.146326       2.877709       0.010487753   0.009592363
Event 12    4/26/2016 22:30   4.090476       2.354489       0.01363492    0.007848297

类似于47号事件

我想为每个事件有一个单独的数据帧。预期产出如下:

事件1_df:

^{pr2}$

事件2_df:

           DateTime      ModFlow(cfs)   ObsFlow(cfs)    ModVol(f3)  Obs Vol(f3)
Event                   
        8/15/2016 15:35    11.85926     0               0.039530867   0
        8/15/2016 10:05    30.05923     0               0.100197433   0
Event 2 8/15/2016 10:00    31.10118     0               0.1036706     0
        8/15/2016 9:55     32.17444     0               0.107248133   0
        8/15/2016 4:10     0.6783166    0.5650155       0.002261055   0.001883385

其他事件也一样

我怎么可能做到呢?在


Tags: 数据eventdfdatetime事件f3cfsobs
2条回答

因为,Event是索引,所以可以使用loc来提取内容并将它们放入dict。在

In [482]: {x: df.loc[x]  for x in df.index.unique()}
Out[482]:
{'Event1':          DateTime  ModFlow(cfs)  ObsFlow(cfs)  ModVol(f3)  ObsVol(f3)
 Event
 Event1  8/15/2016     11.859260      0.000000    0.039531    0.000000
 Event1  8/15/2016     30.059230      0.000000    0.100197    0.000000
 Event1  8/15/2016     31.101180      0.000000    0.103671    0.000000
 Event1  8/15/2016     32.174440      0.000000    0.107248    0.000000
 Event1  8/15/2016      0.678317      0.565016    0.002261    0.001883,
 'Event10':           DateTime  ModFlow(cfs)  ObsFlow(cfs)  ModVol(f3)  ObsVol(f3)  Event
 Event10  6/23/2016      0.557357      0.481424    0.001858    0.001605
 Event10  6/23/2016      0.553690      0.354489    0.001846    0.001182
 Event10  6/23/2016      0.550211      0.368421    0.001834    0.001228
 Event10  6/23/2016      0.569802      0.501548    0.001899    0.001672
 Event10  6/23/2016      0.752537      0.879257    0.002508    0.002931,
 'Event11':           DateTime  ModFlow(cfs)  ObsFlow(cfs)  ModVol(f3)  ObsVol(f3)  Event
 Event11  6/10/2016      0.659315      0.614551    0.002198    0.002049
 Event11  6/10/2016      0.662112      0.840557    0.002207    0.002802
 Event11  6/10/2016      0.657809      0.817338    0.002193    0.002724
 Event11  6/10/2016      0.658195      0.871517    0.002194    0.002905,
 'Event12':           DateTime  ModFlow(cfs)  ObsFlow(cfs)  ModVol(f3)  ObsVol(f3)  Event
 Event12  4/26/2016      2.307288      2.588235    0.007691    0.008627
 Event12  4/26/2016      2.366998      3.091331    0.007890    0.010304
 Event12  4/26/2016      2.494073      3.278638    0.008314    0.010929
 Event12  4/26/2016      2.746868      3.083591    0.009156    0.010279
 Event12  4/26/2016      3.146326      2.877709    0.010488    0.009592
 Event12  4/26/2016      4.090476      2.354489    0.013635    0.007848}

详细信息:

^{pr2}$

如果不在这些名称中进行硬编码,就无法将它们分配给变量名。但是,您可以创建一个字典来存储每个数据帧的键。在本例中,字典理解:

> event_dict = {event: df.loc[event] for event in df.index.unique()}

> event_dict['Event1']
# returns 
          DateTime  ModFlow(cfs)  ObsFlow(cfs)  ModVol(f3)  ObsVol(f3)
 Event
 Event1  8/15/2016     11.859260      0.000000    0.039531    0.000000
 Event1  8/15/2016     30.059230      0.000000    0.100197    0.000000
 Event1  8/15/2016     31.101180      0.000000    0.103671    0.000000
 Event1  8/15/2016     32.174440      0.000000    0.107248    0.000000
 Event1  8/15/2016      0.678317      0.565016    0.002261    0.001883

相关问题 更多 >