【问题标题】:python sort dictionary of lists based on single listpython 基于单个列表的列表字典排序
【发布时间】:2021-08-09 12:25:29
【问题描述】:

我已经导入了一个 csv 文件并将其数据存储到带有 pandas 的字典中,如下所示:

import pandas as pd
df = pd.read_csv(inputfile)
mydict = df.to_dict(orient='list')

现在,我想用一个列表来

  1. 设置新键
  2. 对其他列表进行排序

我通过这样做也取得了类似的成就:

gb = df.groupby('time')
ts = dict(list(gb))

“问题”是我有一个数据框字典而不是列表字典。

基本示例

csv 文件:

var1 var2 var3 time var4
1    0    1.1  0    34
2    0    2.1  1    150
3    0    6    2    16
1    0    1.1  0    34
2    0    2.1  1    150
3    0    6    2    16
1    0    1.1  0    34
2    0    2.1  1    150
3    0    6    2    16

用 pandas 导入的字典

mydict = 
{'var1': [1, 2, 3, 1, 2, 3, 1, 2, 3], 
'var2': [0, 0, 0, 0, 0, 0, 0, 0, 0], 
'var3': [1.1, 2.1, 6.0, 1.1, 2.1, 6.0, 1.1, 2.1, 6.0], 
'time': [0, 1, 2, 0, 1, 2, 0, 1, 2], 
'var4': [34, 150, 16, 34, 150, 16, 34, 150, 16]}

我想要实现的是

mydict2 = 
{0: {'var1':[1,1,1], 'var2':[0,0,0], 'var3':[1.1,1.1,1.1], 'var4':[34,34,34]},
 1: {'var1':[2,2,2], 'var2':[0,0,0], 'var3':[2.1,2.1,2.1], 'var4':[150,150,150]},
 2: {'var1':[3,3,3], 'var2':[0,0,0], 'var3':[6,6,6], 'var4':[16,16,16]}}

到目前为止,我得到的结果是相似的,但是对于每个time,我都会得到一个数据框:

ts = {0:    var1  var2  var3  time  var4
0     1     0   1.1     0    34
3     1     0   1.1     0    34
6     1     0   1.1     0    34, 
1:    var1  var2  var3  time  var4
1     2     0   2.1     1   150
4     2     0   2.1     1   150
7     2     0   2.1     1   150, 
2:    var1  var2  var3  time  var4
2     3     0   6.0     2    16
5     3     0   6.0     2    16
8     3     0   6.0     2    16}

在哪里,如果我输入 type(ts[0]) 我会得到 <class 'pandas.core.frame.DataFrame'> 这没关系(我可以完成工作),但是如果我想要一个列表字典呢?

【问题讨论】:

    标签: python pandas list dictionary nested


    【解决方案1】:

    DataFrame.to_dict 中对orient='list' 使用dict 理解:

    d = {k: v.to_dict(orient='list') for k, v in df.set_index('time').groupby('time')}
    print (d)
    {0: {'var1': [1, 1, 1], 'var2': [0, 0, 0], 'var3': [1.1, 1.1, 1.1], 'var4': [34, 34, 34]}, 
     1: {'var1': [2, 2, 2], 'var2': [0, 0, 0], 'var3': [2.1, 2.1, 2.1], 'var4': [150, 150, 150]}, 
     2: {'var1': [3, 3, 3], 'var2': [0, 0, 0], 'var3': [6.0, 6.0, 6.0], 'var4': [16, 16, 16]}}
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      x = df.groupby("time").agg(list).to_dict("index")
      print(x)
      

      打印:

      {0: {'var1': [1, 1, 1], 'var2': [0, 0, 0], 'var3': [1.1, 1.1, 1.1], 'var4': [34, 34, 34]}, 
       1: {'var1': [2, 2, 2], 'var2': [0, 0, 0], 'var3': [2.1, 2.1, 2.1], 'var4': [150, 150, 150]}, 
       2: {'var1': [3, 3, 3], 'var2': [0, 0, 0], 'var3': [6.0, 6.0, 6.0], 'var4': [16, 16, 16]}}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        • 2011-03-29
        相关资源
        最近更新 更多