如何对熊猫使用多个套用

时间:2018-10-06 14:50:43

标签: python json excel pandas apply

我正在将pandas与Python一起用于将Excel导出为JSON。这是我使用这个lib和python的第一天:)

Excel文件: My excel datas

或DataFrame:

     DATA1  NAME CLIENT  PHONE CLIENT  NAME BOSS  PHONE BOSS
0    123    JOHN         DOE           KING       KING

我正在尝试使用这样的JSON:

[
  {
    "DATA1": 123,
    "CLIENT": [
      {
        "NAME CLIENT": "John",
        "PHONE CLIENT": "Doe"
      }
    ],
    "BOSS": [
      {
        "NAME BOSS": "King",
        "PHONE BOSS": "King"
      }
    ]
  }
]

当我尝试获取第一个json数组没问题时,我正在使用它:

df.groupby(["DATA1"], as_index=False)
  .apply(lambda x: x[['NAME CLIENT', 'PHONE CLIENT']].to_dict('r'))
   .reset_index()
   .rename(columns={0: 'CLIENT'})
   .to_json(path_or_buf='output_path.json', orient='records'))

但是,如果我尝试同时获取两个数组,它将无法正常工作。我尝试执行多个apply或agg函数,但无法正常工作,而且我不知道该在哪里使用dict函数:

 df.groupby(["DATA1"], as_index=False)
   .agg({'CLIENT' : lambda x: x[['NAME CLIENT', 'PHONE CLIENT']],
     'BOSS' : lambda x: x[['NAME BOSS', 'PHONE BOSS']]})
   .reset_index()
   .to_json(path_or_buf='output_path.json', orient='records'))

如果有人可以给我一些帮助... 谢谢大家:)

1 个答案:

答案 0 :(得分:0)

您可以根据需要使用单独的功能来构建每条记录:

def f( df ):
    return { 'CLIENT': df[ ['NAME CLIENT', 'PHONE CLIENT'] ],
             'BOSS': df[ ['NAME BOSS', 'PHONE BOSS'] ], 
             'DATA1': df[ 'DATA1' ].values[0]
           }

df.groupby("DATA1", as_index=False).apply( f ).to_json(path_or_buf='output_path.json', orient='records')