【问题标题】:How to combine multiple columns of a pandas Dataframe into one column in JSON format如何将 pandas Dataframe 的多列合并为 JSON 格式的一列
【发布时间】:2023-02-02 19:37:38
【问题描述】:

我有一个示例数据框,如下所示:

Main Key Second Column A Column B Column C Column D Column E
First A Value 1 Value 2 Value 3 Value 4 Value 5
Second B Value 6 Value 7 Value 8 Value 9 Value 10
Third C Value 11 Value 12 Value 13 Value 14 Value 15
Fourth D Value 16 Value 17 Value 18 Value 19 Value 20

我想创建一个名为“聚合数据”的新列,我将列 A 到 E 中的每个值作为键值对,并将它们组合成 JSON 格式的“聚合数据”

预期的输出将如下所示:

Main Key Second Aggregated Data
First A {"Column A":"Value 1","Column B":"Value 2","Column C":"Value 3","Column D":"Value 4","Column E":"Value 5"}
Second B {"Column A":"Value 6","Column B":"Value 7","Column C":"Value 8","Column D":"Value 9","Column E":"Value 10"}
Third C {"Column A":"Value 11","Column B":"Value 12","Column C":"Value 13","Column D":"Value 14","Column E":"Value 15"}
Fourth D {"Column A":"Value 16","Column B":"Value 17","Column C":"Value 18","Column D":"Value 19","Column E":"Value 20"}

知道如何实现吗?谢谢

【问题讨论】:

    标签: python pandas dataframe group-by


    【解决方案1】:

    通过中间 pandas.DataFrame.to_dict 调用(使用 orient records 获取类似 [{column -> value}, … , {column -> value}] 的列表):

    df[['Main Key', 'Second']].assign(Aggregated_Data=df.set_index(['Main Key', 'Second']).to_dict(orient='records'))
    

      Main Key Second                                    Aggregated_Data
    0   First      A   {'Column A': 'Value 1 ', 'Column B': 'Value 2 ...
    1  Second      B   {'Column A': 'Value 6 ', 'Column B': 'Value 7 ...
    2   Third      C   {'Column A': 'Value 11 ', 'Column B': 'Value 1...
    3  Fourth      D   {'Column A': 'Value 16 ', 'Column B': 'Value 1...
    

    【讨论】:

      【解决方案2】:

      只是跳过前两列并调用to_json

      out = (df[["Main Key", "Second"]]
             .assign(Aggregated_Data= df.iloc[:, 2:]
                                        .apply(lambda x: x.to_json(), axis=1))
      

      或者,使用字典/列表:

      df["Aggregated_Data"] = [{k: v for k, v in zip(df.columns[2:], v)}
                               for v in df.iloc[:,2:].to_numpy()]
      

      输出 :

      print(out)
      
        Main Key Second                                    Aggregated_Data
      0    First      A  {"Column A":"Value 1","Column B":"Value 2","Co...
      1   Second      B  {"Column A":"Value 6","Column B":"Value 7","Co...
      2    Third      C  {"Column A":"Value 11","Column B":"Value 12","...
      3   Fourth      D  {"Column A":"Value 16","Column B":"Value 17","...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-07
        • 2021-07-04
        • 1970-01-01
        • 2021-03-25
        • 2016-11-17
        • 1970-01-01
        • 2021-01-11
        相关资源
        最近更新 更多