Панды: назначение значения столбца в функции не работает - PullRequest
0 голосов
/ 25 мая 2018

У меня есть набор данных, который выглядит следующим образом:

country | year      | supporting_nation | eco_sup  | mil_sup
------------------------------------------------------------------
  Fake       1984        US                 1          1
  Fake       1984        SU                 0          1

В этом фальшивом примере нация играет обе стороны во время холодной войны и получает поддержку от обеих сторон.

Я изменяю набор данных двумя способами:

  1. Я удалил все экземпляры поддержки, не относящиеся к США / ЮУ, меня интересуют только эти две страны
  2. Iхочу уменьшить его до 1 line per year per country, что означает, что я добавляю фиктивные переменные, специфичные для US / SU для каждой переменной

Примерно так:

country |   year      | US_SUP | US_eco_sup  | US_mil_sup | SU_SUP | SU_eco_sup  | SU_mil_sup |
    ------------------------------------------------------------------------------------------
 Fake       1984        1             1          1         1          1             1
 Fake       1985        1             1          1         1          1             1
 florp      1984        0             0          0         1          1             1
 florp      1985        0             0          0         1          1             1

Я добавил все фиктивные значениястолбцы US_SUP и SU_SUP заполнены правильными значениями.

Однако у меня проблемы с присвоением правильного значения другим переменным.

Для этого я написал следующую функцию:

def get_values(x):
    cols = ['eco_sup', 'mil_sup']
    nation = ''
    if x['SU_SUP'] == 1:
        nation = 'SU_'
    if x['US_SUP'] == 1:
        nation = 'US_'

    support_vars = x[['eco_sup', 'mil_sup']]
    # Since each line contains only one measure of support I can
    # automatically assume that the support_vars are from
    # the correct nation
    support_cols = [nation + x for x in cols]
    x[support_cols] = support_vars

План состоит в том, чтобы использовать операцию df.groupby.agg('max'), но я никогда не доберусь до этого шага, так как функция выше return 0 для каждого нового фиктивного столбца, независимо от значения столбцов в кадре данных.

Итак, в последней таблице все переменные US/SU_mil/eco_sup будут равны 0.

Кто-нибудь знает, что я делаю неправильно / почему столбцы получают неправильное значение?

1 Ответ

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

Я решил свою проблему, отказавшись от функции .apply и использовав ее вместо этого (где old - это список старых имен переменных)

for index, row in df.iterrows():
    if row['SU_SUP'] == 1:
        nation = 'SU_'
        for col in old:
            df[index: index + 1][nation + col] = int(row[col])
    if row['US_SUP'] == 1:
        nation = 'US_'
        for col in old:
            df[index: index + 1][nation + col] = int(row[col])

Это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...