【发布时间】:2022-01-26 01:21:58
【问题描述】:
摆在我面前的问题是连接两个数组,类似于 SQL,其中一个“键”由两列 YEAR 和 MONTH 组成。这两个数组代表收入(每年和每月)以及同样的费用。我想加入它们,使用键,生成另一个包含四列的数组:YEAR、MONTH、INCOME、EXPENSE。
我拥有的两个数组是:
income = [["2019","Jan.", 2000],
["2019","Feb.", 1500],
[ ---- , --- , --- ],
["2019","Dec.", 1200],
["2020","Jan.", 1400],
[ ---- , --- , --- ],
["2020","Dec.", 1300]]
Expenses = [["2019","Jan.", 1800],
["2019","Feb.", 1400],
[ ---- , --- , --- ],
["2019","Dec.", 1100],
["2020","Jan.", 1300],
[ ---- , --- , --- ],
["2020","Dec.", 1200]]
而想要的结果是:
Joined = [["2019","Jan.", 2000, 1800],
["2019","Feb.", 1500, 1400],
[ ---- , --- , --- ----],
["2019","Dec.", 1200, 1100],
["2020","Jan.", 1400, 1300],
[ ---- , --- , --- ----],
["2020","Dec.", 1300, 1200]]
我该怎么办?列表理解?循环? pythonic的方式是什么?
【问题讨论】:
-
随心所欲。这将很难用列表推导来完成,因为列表推导用于映射/过滤操作,进行连接需要非常低效的算法,相反,您应该使用 dict 作为索引。通常,如果您考虑连接,那么
list是错误的数据结构。 “pythonic”的方式是使用更合适的数据结构(或者可能只是使用数据库,Python 已经与 sqlite 一起分发) -
您应该查看 Pandas 库。它使处理这样的数据变得轻而易举。
-
另外,您确实必须提供minimal reproducible example。您提供的示例引发了
SyntaxError。[ ---- , --- , --- ]应该是什么? -
它们是否总是相同的位置,或者收入列表第1行可能是2020年,费用第1行可能是2019年,您需要相应地匹配它们吗?
-
@juanpa.arrivillaga:
[ ---- , --- , --- ]只是Dito的一种。实际的数组是两年或更长时间,每一个都是 12 个月。只需删除这些行,您就会得到两个可执行的输入数组。
标签: python python-3.x inner-join