在pandas / python中优化数据库查找和更新

时间:2019-04-10 19:33:19

标签: python sql pandas cursor pyodbc

此处的理论数据库/编码查询-与Python / Pandas数据框相关。我正在处理一个表中多达5万行的数据,因此最佳的解决方案似乎... erm,最佳。而且我也不是编码专家,所以,请忍受我。

我有一个表,该表具有唯一的子代码/国家/地区对行,其中一些具有匹配的父代码。例如:

Index | Parent | Child | Country | NewValue
0     |  A     |  A-1  |  X      | Null
1     |  A     |  A-1  |  Y      | Null 
2     |  A     |  A-2  |  X      | Null
3     |  B     |  B-1  |  X      | Null
4     |  B     |  B-2  |  Y      | Null

我需要使用计算出的唯一值(NewValue)更新每个“父母/国家/地区”对。找到并更新每一行中的每一对的最佳方法是什么?

到目前为止,我正在生成单独的父/国家/地区对的单独列表(以避免不必要地为每一行计算NewValue;我只是在遍历该列表为每一对生成NewValue),例如:

Parent | Country
A      |  X
A      |  Y
B      |  X
B      |  Y

现在,对每个给定的父/国家/地区匹配项,在第一个表中进行查找,获取所有匹配行的行索引,然后通过行索引进行更新,是否更好?

或者,以包含任何相关索引开头的方式生成第二个表,并使用它们来更新第一个表?例如:

Parent | Country | Index(s)
A      | X       | 0,2
A      | Y       | 1
B      | X       | 3
B      | Y       | 4

如果为2,如何?因为我正在使用df.unique()生成第二张表,所以每对仅获得一个索引,而没有任何数学索引(并且我不确定如果这样做了,它们将如何显示)。而且我不确定这两种方法是否特别好,但这是我一天中提出的最好的方法:o)

谢谢

Christopher / pepsi_max2k

1 个答案:

答案 0 :(得分:0)

您可能想看看merge函数。

您要做的是

df_children.merge(df_parent, on=["Parent","Country"])

其中df_children是带有[索引|上级儿童|国家/地区]列和df_parent具有[父母|国家(地区)| NewValue]