Связывать объекты во вложенном списке по ключу словаря - PullRequest
0 голосов
/ 07 мая 2018

В настоящее время я являюсь этими наборами данных с Kiva Kaggle Competition: https://www.kaggle.com/kiva/data-science-for-good-kiva-crowdfunding/data

Я хочу связать значение MPI с плавающей запятой («Индекс многомерной бедности») с соответствующими географическими регионами для каждого микрокредита.

  • В одном наборе данных kiva_mpi_region_locations.csv каждый регион имеет одно соответствующее значение MPI, связанное с ним.
  • Однако в наборе данных kiva_loans.csv, где каждому ссуде присваивается «Регион», данные часто имеют несколько значений в одной и той же ячейке, разделенных запятыми (,).

['kiva_loans.csv' / Пример данных ссуды] (Примечание: разные ссуды могут поступать из одного региона, поэтому в этом случае регион является внешним ключом, но не первичным ключом):

Loan #: 653338  
region: Tanjay, Negros Oriental 

[kiva_mpi_region_locations.csv / Пример значения регионального MPI] (Обратите внимание, что каждый регион имеет только один MPI в качестве региона в первичном ключе):

region: Badakhshan

MPI: 0.387

Пока мой код:

RegionMPI = dict(zip(dfLocations.region, dfLocations.MPI))

{'Badakhshan': 0.387,
 'Badghis': 0.466,
 'Baghlan': 0.3,
 'Balkh': 0.301,
 'Bamyan': 0.325,
 'Daykundi': 0.313,
  etc}

LoanRegion = dfLoanTheme['region'].str.split(',').values.tolist()

 [['Lahore']
 nan,
 ['Dar es Salaam'],
 ['Liloy-Dela Paz'],
 ['Tanjay', ' Negros Oriental'],
 ['Ica'],
 nan,
['Lahore']]

Любой совет, как циклически проходить по моему вложенному списку, а затем использовать мои словарные ключи, чтобы связать соответствующее значение из моего словаря с моим списком для всех вхождений этого ключа в моем списке?

1 Ответ

0 голосов
/ 07 мая 2018

Вы хотите сделать merge на двух фреймах данных в поле region. Библиотека pandas делает это действительно простым (также быстродействующим). Код выглядит следующим образом (ваши CSV-файлы находятся за регистрационной стеной Kaggle):

import pandas as pd

loans = pd.read_csv('kiva_loans.csv')
mpi_regions = pd.read_csv('kiva_mpi_region_locations.csv')

df = loans.merge(mpi_regions, on='region')

Вы действительно не хотите изобретать велосипед, написав свой собственный код соединения в базовом Python, уже используйте пакет pandas.

(Обратите внимание, что вы предполагаете, что region уникально для разных стран. Возможно, безопаснее объединить оба on=['country','region'])

...