python - 在哪里合并 goup 以正确导出 json?
问题描述
我希望以特定格式将我的 DF 导出到 Json,但是我无法正确分组,而且我不知道在哪里包含它。
数据框:
item_type purch_price sale_price city location
0 Iphone 1200 1150 NaN NaN
1 Computer 700 NaN Los Angeles 1st street
2 Computer 700 NaN San Jose 2nd street
当前代码:
import json
import pandas as pd
df = pd.read_csv(r'filepath', delimiter=';', header=0)
df = df.fillna('')
def shop_details(row):
if row['city'] != '' and row['location'] !='':
return [{'city': row['city'], 'location': row['location']}]
else:
return []
df['shop_details'] = df.apply(lambda row: shop_details(row), axis = 1)
df = df.drop(['city', 'location'], axis = 1)
def print_json(text):
parsed = json.loads(text)
print(json.dumps(parsed, indent=4, sort_keys=False))
print_json(df.to_json(orient='records'))
* 当前结果 *
[
{
"item_type": "Iphone",
"purch_price": 1200,
"sale_price": 1150.0,
"shop_details": []
},
{
"item_type": "Computer",
"purch_price": 700,
"sale_price": "",
"shop_details": [
{
"city": "Los Angeles",
"location": "1st Street"
}
]
},
{
"item_type": "Computer",
"purch_price": 700,
"sale_price": "",
"shop_details": [
{
"city": "San Jose",
"location": "2nd Street"
}
]
}
]
期望的输出:
[{
"item_type": "Iphone",
"purch_price": "1200",
"sale_price": "1150",
"shop_details": []
},
{
"item_type": "Computer",
"purch_price": "700",
"sale_price": "600",
"shop_details": [{
"city": "Los Angeles",
"location": "1st street"
},
{
"city": "San Jose",
"location": "2nd street"
}
]
}
]
- 如示例中所示,我希望以“desired_output”格式显示城市和位置信息,而不是有两个条目具有完整的 item_type、purchase_price 和 sale_price。
解决方案
删除列后,使用 groupby 和 'sum' 连接您的 dicts 列表(连接列表的另一个更简单的示例:link),然后重置索引:
df_grouped=df.groupby(by=['item_type','purch_price','sale_price']).agg({'shop_details':'sum'}).reset_index()
您的 print_json 的结果输出是:
[
{
"item_type": "Computer",
"purch_price": 700,
"sale_price": "",
"shop_details": [
{
"city": "'Los Angeles'",
"location": "'1st street'"
},
{
"city": "'San Jose'",
"location": "'2nd street'"
}
]
},
{
"item_type": "Iphone",
"purch_price": 1200,
"sale_price": 1150.0,
"shop_details": []
}
]
请注意,我不确定您 600 的销售价格来自何处,因为它不在您的原始数据框中。
推荐阅读
- liquibase - Liquibase 上下文中的括号和逗号
- php - 如何在一个项目中添加数组项目?
- spring - OneToMany 不返回从其他实体保存的值
- javascript - Google Maps API 和 Angular 1 中的变量范围
- python - Python从查询创建嵌套的html表
- javascript - admin.auth().currentUser; 在云函数中返回未定义
- css - CSS 通过“react-scripts build”命令破坏部署
- javascript - 在包含复杂嵌套数组的 javascript 对象中查找项目
- diameter-protocol - 直径最终单位指示 avp 可以通过 Gx 接口使用吗?
- android - 如何验证电子邮件地址的特定域?