python 如何以JSON格式将panda Dataframe的多列合并为一列

yrdbyhpb  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(235)

我有一个示例 Dataframe 如下:
| 主键|第二次|色谱柱A|B栏|C栏|D栏|E栏|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 第一次|A类|数值1|数值2|数值3|数值4|值5|
| 第二次|B|数值6|值7|数值8|数值9|数值10|
| 第三次|C级|价值11|数值12|价值13|值14|数值15|
| 第四次|D级|数值16|数值17|数值18|值19|数值20|
我想创建一个名为“Aggregated Data”的新列,其中我将列A到E中的每个值作为键-值对,并将它们以JSON格式组合到“Aggregated Data”中
预期输出如下所示:
| 主键|第二次|汇总数据|
| - ------|- ------|- ------|
| 第一次|A类|{“A列”:“数值1”,“B列”:“数值2”,“C列”:“数值3”,“D列”:“数值4”,“E列”:“数值5”}|
| 第二次|B|{“A列”:“数值6”,“B列”:“数值7”,“C列”:“数值8”,“D列”:“数值9”,“E列”:“数值10”}|
| 第三次|C级|{“A列”:“数值11”,“B列”:“数值12”,“C列”:“数值13”,“D列”:“数值14”,“E列”:“数值15”}|
| 第四次|D级|{“A列”:“数值16”,“B列”:“数值17”,“C列”:“数值18”,“D列”:“数值19”,“E列”:“数值20”}|
你知道怎么才能做到吗?谢谢

jecbmhm3

jecbmhm31#

通过中间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...
gopyfrb3

gopyfrb32#

只需 * 跳过 * 前两列并调用to_json

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

或者,使用 dict/listcomp

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","...

相关问题