基于列值从数据帧创建字典

2024-03-29 11:42:07 发布

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

基于列值从数据帧创建多个字典的最佳方法是什么

我的数据帧具有以下格式:

    evtnum    pcode   energy
1   1         a       20.0
2   1         a       30.0
3   1         b       29.0
4   1         a       34.0
5   2         c       20.0
6   2         a       15.0
7   3         a        3.0
8   3         b        2.0 
9   3         c       25.0
10  4         h       28.0
11  5         a       43.6
12  5         c       20.3

evtnum取1到5000之间的值,pcode是25个不同的字母。我有一套信是这样写的:

pcode_set = [a,b,c,d,h,...]

所以,我想得到每个长度(pcode_set)的evtnum字典,计算每个事件中每个字母的发生率,以及这个字母在这个事件中能量的平均值。像这样:

 dict_1 = {a : [timesthat"a"appears in evtnum1, 
                energy mean value of a in evtnum1], 
           b : [timesthat"b"appears in evtnum1, 
                energy mean value of b in evtnum1]  
          ...
          }

 dict_2 = {a : [timesthat"a"appears in evtnum2, 
                energy mean value of a in evtnum2], 
           b : [timesthat"b"appears in evtnum2, 
                energy mean value of b in evtnum2]  
          ...
          }
...

 dict_5000 = {a : [timesthat"a"appears in evtnum5000, 
                energy mean value of a in evtnum5000], 
              b : [timesthat"b"appears in evtnum5000, 
                energy mean value of b in evtnum5000]  
             ...
          }

请不要回答我如何计算字母的出现频率或如何计算平均值,这些只是例子。 我只想知道如何创建多个字典,并在考虑dataframe的列值的情况下填充它们


Tags: ofin字典value字母meandictenergy
1条回答
网友
1楼 · 发布于 2024-03-29 11:42:07

使用您的示例,此脚本应实现以下技巧:

thismodule = sys.modules[__name__]

df1 = df.groupby(['evtnum', 'pcode']).agg({'pcode':'size', 'energy':'mean'}).rename(columns={'pcode': 'num_pcode',
                                                                                             'energy':'mean_energy'}).reset_index(drop = False)

for evt in df1.evtnum.unique():
    name = 'dict_'+str(evt)
    df_ = df1
    df_ = df_[df_.evtnum==evt].drop('evtnum', 1).set_index('pcode').to_dict('index')
    setattr(thismodule, name, df_)

for number in range(max(df1.reset_index().evtnum.unique())):
    print( number+1)
    print(eval('dict_'+str(number+1)))

打印:

1
{'a': {'num_pcode': 3, 'mean_energy': 28.0}, 'b': {'num_pcode': 1, 'mean_energy': 29.0}}
2
{'a': {'num_pcode': 1, 'mean_energy': 15.0}, 'c': {'num_pcode': 1, 'mean_energy': 20.0}}
3
{'a': {'num_pcode': 1, 'mean_energy': 3.0}, 'b': {'num_pcode': 1, 'mean_energy': 2.0}, 'c': {'num_pcode': 1, 'mean_energy': 25.0}}
4
{'h': {'num_pcode': 1, 'mean_energy': 28.0}}
5
{'a': {'num_pcode': 1, 'mean_energy': 43.6}, 'c': {'num_pcode': 1, 'mean_energy': 20.3}}

相关问题 更多 >