2017-12-26 27 views
0

ように私はdatafram dfを持っている:私は出力を生成したい整形パンダのデータフレームの出力

task_count task date 
0 82586  foo  2015-10-31 
1 57417  foo  2016-08-31 
2 47800  bar  2016-12-31 
3 62331  foo  2016-02-29 
4 45852  bar  2017-07-31 

として:今のところ、これは私がやったが、私はないんだけど何である

[ 
    { 
    "task": "foo", 
    "task_count": [82586,57417,62331], 
    "date": ["2015-10-31","2016-08-31","2016-02-29"] 
    }, 
    { 
    "task": "bar", 
    "task_count": [47800,45852], 
    "date": ["2016-12-31","2017-07-31"] 
    } 
] 

複数の列でgroupbyを実行することができます。

希望の出力を達成するための私のアプローチは?

答えて

3

を使用できgroupby + agg + to_dict -


あなたはJSONを生成し、結果をファイルにダンプし、使用したい場合は

df.groupby('task', as_index=False).agg(lambda x: x.tolist()).to_dict('r') 
[ 
    { 
     "date": [ 
      "2016-12-31", 
      "2017-07-31" 
     ], 
     "task_count": [ 
      47800, 
      45852 
     ], 
     "task": "bar" 
    }, 
    { 
     "date": [ 
      "2015-10-31", 
      "2016-08-31", 
      "2016-02-29" 
     ], 
     "task_count": [ 
      82586, 
      57417, 
      62331 
     ], 
     "task": "foo" 
    } 
] 
to_json代わり to_dictの -

df.groupby('task', as_index=False)\ 
    .agg(lambda x: x.tolist())\ 
    .to_json('file.json', orient='records') 

これは、

を含む file.jsonを作成します。
[{"task":"bar","task_count":[47800,45852],"date":["2016-12-31","2017-07-31"]},{"task":"foo","task_count":[82586,57417,62331],"date":["2015-10-31","2016-08-31","2016-02-29"]}]' 
+0

これはうまくいくようですが、何とか私の日付フィールドの値がいくつかのランダムな整数に変更されました。また、私はPythonの初心者ですから、 'r'パラメータがto_dict()で何をするのか説明してください。 –

+0

@ GabbarSingh 'r'はレコードのリストが返されることを意味する" records "の別名です。また、私は 'to_dict'があなたのデータを置き換える乱数になるべき理由を本当に知りません。 –

+0

@COLDSPEEDこれは、データフレーム 'df'の' date'カラムは実際には文字列ではなく、 'df'に挿入されたときにデータベースの 'date'データ型であったからです。あなたはこれを示唆することができる周りの任意の仕事ですか? –

関連する問題