【发布时间】:2019-08-05 12:14:55
【问题描述】:
我正在努力通过键(在嵌套字典中)对嵌套字典进行分组,并通过聚合一些嵌套字典的数据。 我希望这里有人能给我一些有用的提示,因为我没有取得任何进展。我正在使用 Python 3.6,我查看了 collections 和 pandas 模块,发现 pandas 模块可能包含我实现目标所需的东西。
提供以下字典:
{
12345: {
'date': '2019-07-26',
'time_spent': 0.5,
'color': 'yellow',
'drive_id': 1804
},
54321: {
'date': '2019-07-26',
'time_spent': 1.5,
'color': 'yellow',
'drive_id': 3105
},
11561: {
'date': '2019-07-25',
'time_spent': 1.25,
'color': 'red',
'drive_id': 1449
},
12101: {
'date': '2019-07-25',
'time_spent': 0.25,
'color': 'red',
'drive_id': 2607
},
12337: {
'date': '2019-07-24',
'time_spent': 2.0,
'color': 'yellow',
'drive_id': 3105
},
54123: {
'date': '2019-07-24',
'time_spent': 1.5,
'color': 'yellow',
'drive_id': 4831
},
15931: {
'date': '2019-07-19',
'time_spent': 3.0,
'color': 'yellow',
'drive_id': 3105
},
13412: {
'date': '2019-07-19',
'time_spent': 1.5,
'color': 'red',
'drive_id': 1449
}
}
将其视为汽车销售商在这些日子里进行的试驾清单,其中包括一次试驾所花费的时间,并通过颜色评估销售机会。现在,我需要对这些数据进行分组:
- 按日期分组,因此新字典可能包含单个日期作为键
- 汇总单个日期的 time_spent 并提供该日期的总和
- 把颜色带上,但如果颜色混了一天(例如红色和黄色),红色总是胜出
- 对于每个日期,有一个 drive_id 聚合列表,以逗号分隔
- 扔掉顶层dict的键名
所以当我手动转换数据时它可能看起来像这样:
{
'2019-07-26':
{
'time_spent': '2.0',
'color': 'yellow',
'drive_id': '1804, 3105',
},
'2019-07-25':
{
'time_spent': '1.5',
'color': 'red',
'drive_id': '1449, 2607',
},
'2019-07-24':
{
'time_spent': '3.5',
'color': 'yellow',
'drive_id': '3105, 4831',
},
'2019-07-19':
{
'time_spent': '4.5',
'color': 'red',
'drive_id': '1449, 3105',
}
}
现在我的障碍在哪里?显然,我的 Python 技能有限,而且我在动态生成 dict 键名(例如 13412)时遇到了困难。我在这里 (Group pandas dataframe by a nested dictionary key) 找到了这个解决方案,但我无法将此解决方案应用于我的案例,因为这里事先不知道 dict 键名。所以我基本上尝试创建一个 pandas DataFrame 并首先按日期对原始字典进行分组,但我已经失败了。
如果我可能忽略了 pandas 文档中的某些内容或 StackOverflow 上的问题,我深表歉意。如果有人能给我一个提示并向我解释如何处理这种情况,我将不胜感激。
【问题讨论】:
-
'date': '2019-07-24'有两个对象,这种情况下怎么办? -
@OlvinRoght:中间的项目符号都解决了这个问题。
-
你可能想研究
dict方法items。 -
@Valentin 编辑您的问题并显示您目前拥有的所有代码,以及任何错误消息。
-
我有一个答案,可以将其放入一个不错的数据框中,非常适合进行额外分析!包括 groupby 的
标签: python dictionary grouping aggregation