【问题标题】: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","...