开发者社区> 问答> 正文

按发生顺序解析dataframe列中的JSON

我有一个数据框,其中有一个包含JSON的列-

Player ID               Response
    1                 [{'id': '1-4', 'content': 'Develop'}, {'id': '1-3', 'content': 'Networking'}, {'id': '1-5', 'content': 'Opportunity'}]
    2                 [{'id': '1-4', 'content': 'Develop'}]
    3                 [{'id': '1-3', 'content': 'Networking'}, {'id': '1-4', 'content': 'Develop'}, {'id': '1-2', 'content': 'Excuse'}]
    4                 [{'id': '1-4', 'content': 'Develop'}, {'id': '1-6', 'content': 'Gain'}, {'id': '1-1', 'content': 'Different'}]  

其中“响应”列按顺序包含1-3个实体。我需要将该列重新排序为-

  ID              Score     InResponse 
  1-1                1          1
  1-2                1          1
  1-3                5          2
  1-4               11          4 
  1-5                1          1
  1-6                2          1   

其中,如果ID顺序为1,则获得3分;如果ID为第二,则获得2分;如果ID为3,则获得1分。因此,例如1-4是3响应中的第1响应,而2则是2的响应,因此3x3 + 1x2 = 11 pts。“ InResponse”表示该ID在数据帧中出现了多少次。

我试过了

pd.io.json.json_normalize(df.Q1.to_dict())

但由于某种原因,它给了我意外的结果。我怎样才能做到这一点?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 20:34:01 435 0
1 条回答
写回答
取消 提交回答
  • 我做了这样的事情-

    dict_response = {'1-1':0, '1-2':0, '1-3':0, '1-4':0, '1-5':0, '1-6':0, '1-7':0}
    dict_occurrence = {'1-1':0, '1-2':0, '1-3':0, '1-4':0, '1-5':0, '1-6':0, '1-7':0}
    for index, row in df.iterrows():
        dict_temp = json.loads(row['Response'].replace("'", '"'))
        dict_response[list(dict_temp[0].values())[0]] += 3
        dict_occurrence[list(dict_temp[0].values())[0]] += 1
        if len(dict_temp) > 1:
            dict_response[list(dict_temp[1].values())[0]] += 2
            dict_occurrence[list(dict_temp[1].values())[0]] += 1
        if len(dict_temp) > 2:
            dict_response[list(dict_temp[2].values())[0]] += 1
            dict_response[list(dict_temp[2].values())[0]] += 1
    
    df_q1_responses = pd.DataFrame()
    df_q1_responses['ID'] = dict_response.keys()
    df_q1_responses['Points'] = df_q1_responses['ID'].map(dict_response)
    df_q1_responses['Responses'] = df_q1_responses['ID'].map(dict_occurrence)
    df_q1_responses
    

    但是我不是特别喜欢我的解决方案。如果您有任何改进或替代解决方案,请告诉我!

    回答来源:stackoverflow

    2020-03-24 20:34:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像