通过循环基于多索引从大型数据框创建数据框字典

时间:2018-12-19 08:24:19

标签: python pandas dataframe

很抱歉,这似乎很简单,但一直在努力寻找答案。

图片中的格式有一个大数据框:dataframe

每行都可以通过在“ trip_id”,“ direction_id”,“ stop_sequence”列中建立的多索引来唯一标识。

我想请求使用循环的方法来创建数据帧的python-字典,其中每个数据帧是大型数据帧的子集,其中包含每个“ trip_id” +“ direction_id”多索引的所有行。

在循环结束时,我希望能够拥有一个数据帧的python-字典,在这里我可以使用简单的索引键(例如0-10,000)访问每个字典,或者该键是trip_id和direction_id的组合

例如对于上面的图像,我希望trip_id为“ 17067064.T0.2-EPP-F-mjp-1.8.R”和方向ID为“ 1”的所有行都在此字典集合的一个数据帧中。

谢谢您的帮助。

亲切的问候,

1 个答案:

答案 0 :(得分:0)

groupbydictionary comprehension一起使用:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,5,5,5,4],
         'C':[7,8,9,4,2,3],
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
}).set_index(['F','B','C'])

print (df)
       A  D  E
F B C         
a 4 7  a  1  5
  5 8  b  3  3
    9  c  5  6
b 5 4  d  7  9
    2  e  1  2
  4 3  f  0  4
       A  D  E

#python 3.6+ 
dfs = {f'{a}_{b}':v for (a, b), v in df.groupby(level=['F','B'])}
#python bellow
#dfs = {'{}_{}'.format(a,b):v for (a, b), v in df.groupby(level=['F','B'])}
print (dfs)
{'a_4':        A  D  E
F B C         
a 4 7  a  1  5, 'a_5':        A  D  E
F B C         
a 5 8  b  3  3
    9  c  5  6, 'b_4':        A  D  E
F B C         
b 4 3  f  0  4, 'b_5':        A  D  E
F B C         
b 5 4  d  7  9
    2  e  1  2}

print (dfs['a_4'])
       A  D  E
F B C         
a 4 7  a  1  5