У меня есть набор данных, который выглядит следующим образом:
country | year | supporting_nation | eco_sup | mil_sup
------------------------------------------------------------------
Fake 1984 US 1 1
Fake 1984 SU 0 1
В этом фальшивом примере нация играет обе стороны во время холодной войны и получает поддержку от обеих сторон.
Я изменяю набор данных двумя способами:
- Я удалил все экземпляры поддержки, не относящиеся к США / ЮУ, меня интересуют только эти две страны
- 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.
Кто-нибудь знает, что я делаю неправильно / почему столбцы получают неправильное значение?