优化Double groupby性能

时间:2017-09-05 23:03:55

标签: python pandas numpy dataframe

所以我有一个看似如下的数据框:

index first_key second_key data text  other
  1      34        987       2   'a'  'name'
  2      34        987       3   'b'  'name' 
  3      40        340       2   'c'  'dog'
  4      34        123       23  'd'  'name'

使用JOIN从数据库中提取 我想要一个看起来像的数组:

[
   {
     first_key: 34,
     other: 'name',
     second_key: [
        {
          second_key: 987,
          data: [2, 3],
          text: ['a', 'b']
        },
        {
          second_key: 123,
          data: [2],
          text: ['c']
        }
     ]
   }
   {
     first_key: 40,
     other: 'dog',
     second_key: [
        {
          second_key: 340,
          data: [2, 3],
          text: ['a', 'b']
        }
     ]
   }
]

现在,我只是循环遍历每一行并逐段构建输出,但它确实很慢。首先崩溃那些行会快得多。

我尝试使用groupbygroups以及numpy,但我无法实现。性能在这里至关重要。

谢谢!

1 个答案:

答案 0 :(得分:0)

这非常接近:

new_index = ['first_key', 'other', 'second_key']
df2 = df.set_index(new_index).groupby(new_index).apply(dict)
foo = json.loads(df2.to_json(orient='table'))
print json.dumps(foo, indent=2, sort_keys=True)