2017-12-26 2 views
0

dataframe의 출력 : 나는 같은 출력을 생성 할형식화하는 팬더 내가 같은 datafram <code>df</code>이

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') 

어느 것이 을 생성합니다 -

[{"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

이것이 작동하는 것 같지만 어떻게 든 내 날짜 필드의 값이 임의의 정수로 변경되었습니다. 또한 내가 파이썬을 처음 접했을 때 'r'매개 변수가 to_dict()에서 무엇을하는지 설명해 주시겠습니까? –

+0

@GabbarSingh'r'은 레코드 목록이 반환되어야 함을 의미하는 "레코드"의 별칭입니다. 또한'to_dict'가 왜 당신의 데이터를 대체하는 난수가되어야하는지에 대해서는 정말로 알지 못합니다. –

+0

@COLDSPEED 이는 데이터 프레임'df'의'date' 열은 실제로 문자열이 아니며 'df'에 삽입 된 경우 데이터베이스의 'date'데이터 유형 이었기 때문입니다. 당신이 이것에 대해 제안 할 수있는 모든 일이 있습니까? –

관련 문제