[英]How to group and format JSON in Python
我想使用 Python 將此 JSON 字符串轉換為另一種格式。 結果還需要按關鍵列(組、源)進行分組。 “月”值將用作 JSON 的關鍵字段。 金額將分別更改為價格 1 和價格 2。
[{
"month": "2022-10-21",
"group" : "value_1",
"source" : "source",
"amount_1" : 10,
"amount_2" : 100
},
{
"month": "2022-08-21",
"group" : "value_2",
"source" : "source",
"amount_1" : 20,
"amount_2" : 50
},
{
"month": "2022-08-21",
"group" : "value_3",
"source" : "source",
"amount_1" : 30,
"amount_2" : 50
},
{
"month": "2022-09-21",
"group" : "value_3",
"source" : "source",
"amount_1" : 40,
"amount_2" : 60
}]
這是預期的結果。
[{
"group": "value_1",
"source" : "source",
"price1" : {
"2020-08-01" : 0,
"2020-09-01" : 0,
"2020-10-01" : 10
},
"price2" : {
"2020-08-01" : 0,
"2020-09-01" : 0,
"2020-10-01" : 100
}
},
{
"group": "value_2",
"source" : "source",
"price1" : {
"2020-08-01" : 20,
"2020-09-01" : 0,
"2020-10-01" : 0
},
"price2" : {
"2020-08-01" : 50,
"2020-09-01" : 0,
"2020-10-01" : 0
}
},
{
"group": "value_3",
"source" : "source",
"price1" : {
"2020-08-01" : 30,
"2020-09-01" : 40,
"2020-10-01" : 0
},
"price2" : {
"2020-08-01" : 80,
"2020-09-01" : 60,
"2020-10-01" : 0
}
}]
有關如何執行此操作的任何建議/庫/代碼示例? 謝謝你。
你需要:
對於新結構,我會將它們放入由該組鍵入的字典中。 完成后組織該字典中的數據(您將需要每個價格的嵌套字典(使用它們作為鍵))。 迭代字典條目並獲取鍵(組)並將其與數據的 rest 一起放入字典中,並將該結果添加到列表中。
您可以使用pandas
來讀取json
並按 `
但稍后可能需要for
-loop 來創建新的json
data = [{
"month": "2022-10-21",
"group" : "value_1",
"source" : "source",
"amount_1" : 10,
"amount_2" : 100
},
{
"month": "2022-08-21",
"group" : "value_2",
"source" : "source",
"amount_1" : 20,
"amount_2" : 50
},
{
"month": "2022-08-21",
"group" : "value_3",
"source" : "source",
"amount_1" : 30,
"amount_2" : 50
},
{
"month": "2022-09-21",
"group" : "value_3",
"source" : "source",
"amount_1" : 40,
"amount_2" : 60
}]
import pandas as pd
import json
#with open('filename.json') as fh:
# data = json.load(fh)
df = pd.DataFrame(data)
print(df)
all_dates = sorted(df['month'].unique())
print('all_dates:', all_dates)
all_items = []
for key, val in df.groupby(['group', 'source']):
item = {'group': key[0], 'source': key[1], 'price1': {}, 'price2': {}}
for date in all_dates:
rows = val[ val['month'] == date ].reset_index(drop=True)
item['price1'][date] = int(rows['amount_1'].get(0, 0))
item['price2'][date] = int(rows['amount_2'].get(0, 0))
all_items.append(item)
print(json.dumps(all_items, indent=2))
結果:
month group source amount_1 amount_2
0 2022-10-21 value_1 source 10 100
1 2022-08-21 value_2 source 20 50
2 2022-08-21 value_3 source 30 50
3 2022-09-21 value_3 source 40 60
all_dates: ['2022-08-21', '2022-09-21', '2022-10-21']
[
{
"group": "value_1",
"source": "source",
"price1": {
"2022-08-21": 0,
"2022-09-21": 0,
"2022-10-21": 10
},
"price2": {
"2022-08-21": 0,
"2022-09-21": 0,
"2022-10-21": 100
}
},
{
"group": "value_2",
"source": "source",
"price1": {
"2022-08-21": 20,
"2022-09-21": 0,
"2022-10-21": 0
},
"price2": {
"2022-08-21": 50,
"2022-09-21": 0,
"2022-10-21": 0
}
},
{
"group": "value_3",
"source": "source",
"price1": {
"2022-08-21": 30,
"2022-09-21": 40,
"2022-10-21": 0
},
"price2": {
"2022-08-21": 50,
"2022-09-21": 60,
"2022-10-21": 0
}
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.