Оптимальный поиск и обновление базы данных в pandas / python - PullRequest
0 голосов
/ 10 апреля 2019

теоретическая база данных / запрос кодирования здесь - связанный с фреймом данных Python / Pandas.Я имею в виду до 50 тысяч строк в таблице, поэтому оптимальные решения кажутся ... ну, оптимальными.И я тоже не специалист по кодированию, так что терпите меня.

У меня есть таблица с уникальными строками пар дочерний код / ​​страна, некоторые с соответствующими родительскими кодами. Например: 100100 *

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)

Спасибо,

Кристофер / pepsi_max2k

1 Ответ

0 голосов
/ 10 апреля 2019

Возможно, вы захотите взглянуть на функцию merge .

В вашем случае вам нужно сделать

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

, где df_children - ваша таблица с [Индекс |Родитель |Ребенок |Страна] столбцы и df_parent имеет [Родитель |Страна |NewValue]

...