python - 如何将动态命名的列加入字典?
问题描述
给定这些数据框:
IncomingCount
-------------------------
Venue|Date | 08 | 10 |
-------------------------
Hotel|20190101| 15 | 03 |
Beach|20190101| 93 | 45 |
OutgoingCount
-------------------------
Venue|Date | 07 | 10 |
-------------------------
Beach|20190101| 30 | 5 |
Hotel|20190103| 05 | 15 |
我怎样才能合并(完全连接)这两个表,而无需手动遍历两个表的每一行,从而得到如下结果?
Dictionary:
[
{"Venue":"Hotel", "Date":"20190101", "08":{ "IncomingCount":15 }, "10":{ "IncomingCount":03 } },
{"Venue":"Beach", "Date":"20190101", "07":{ "OutgoingCount":30 }, "08":{ "IncomingCount":93 }, "10":{ "IncomingCount":45, "OutgoingCount":15 } },
{"Venue":"Hotel", "Date":"20190103", "07":{ "OutgoingCount":05 }, "10":{ "OutgoingCount":15 } }
]
条件是:
- Venue 和 Date 列的作用类似于连接条件。
- 以数字表示的其他列是动态创建的。
- 如果动态列不存在,它将被排除(或包含在 None 作为值)。
解决方案
到目前为止我可以得到这个:
import pandas as pd
import numpy as np
dd1 = {'venue': ['hotel', 'beach'], 'date':['20190101', '20190101'], '08': [15, 93], '10':[3, 45]}
dd2 = {'venue': ['beach', 'hotel'], 'date':['20190101', '20190103'], '07': [30, 5], '10':[5, 15]}
df1 = pd.DataFrame(data=dd1)
df2 = pd.DataFrame(data=dd2)
df1.columns = [f"IncomingCount:{x}" if x not in ['venue', 'date'] else x for x in df1.columns]
df2.columns = [f"OutgoingCount:{x}" if x not in ['venue', 'date'] else x for x in df2.columns ]
ll_dd = pd.merge(df1, df2, on=['venue', 'date'], how='outer').to_dict('records')
ll_dd = [{k:v for k,v in dd.items() if not pd.isnull(v)} for dd in ll_dd]
输出:
[{'venue': 'hotel',
'date': '20190101',
'IncomingCount:08': 15.0,
'IncomingCount:10': 3.0},
{'venue': 'beach',
'date': '20190101',
'IncomingCount:08': 93.0,
'IncomingCount:10': 45.0,
'OutgoingCount:07': 30.0,
'OutgoingCount:10': 5.0},
{'venue': 'hotel',
'date': '20190103',
'OutgoingCount:07': 5.0,
'OutgoingCount:10': 15.0}]
推荐阅读
- ios - 使用精灵速度(快速)飞扬的小鸟游戏旋转精灵
- arrays - 如何使用命名数组的接口:元素隐式具有“任何”类型,因为索引表达式不是“数字”类型
- python - 如何使用非 gmail 域名访问“gmail”伞形帐户?
- excel - Excel公式计算日期范围内的文本
- javascript - 当用户沿着 Highcharts 区域图滑动手指时,如何更新外部 DIV?
- python-3.x - 如何在 aws lambda 的 tmp 目录中使用 pandas 读取 csv
- node.js - 验证用户身份后通过 id 传递整个对象
- selenium - 限制 selenium webdriver 范围时的困惑
- javascript - 如何加载 JSON 并拆分响应字符串?
- python-3.x - 这个大小运算符在函数调用中做了什么?