AyyBeeShafi
AyyBeeShafi

Reputation: 25

Multiply a specific value with a series of columns based on a Condition in Pandas Dataframe

I have data of a certain country that gives the certain age group population in a time series. I am trying to multiply the number of the female population with -1 to display it on the other side of the pyramid graph. I have achieved that for one year i.e 1960 (see code below). Now I want to achieve the same results for all the columns from 1960-2020

PakPopulation.loc[PakPopulation['Gender']=="Female",['1960']]=PakPopulation['1960'].apply(lambda x:-x)

I have also tried the following solution but no luck:

PakPopulation.loc[PakPopulation['Gender']=="Female",[:,['1960':'2019']]=PakPopulation[:,['1960':'2019']].apply(lambda x:-x)

Schema:

Country Age Group Gender 1960 1961 1962
XYZ 0-4 Male 5880k 5887k 6998k
XYZ 0-4 Female 5980k 6887k 7998k

Upvotes: 0

Views: 47

Answers (1)

Henry Ecker
Henry Ecker

Reputation: 35646

You could build a list of years and use that list as part of your selection:

import pandas as pd

PakPopulation = pd.DataFrame({
    'Country': {0: 'XYZ', 1: 'ABC'},
    'Age Group': {0: '0-4', 1: '0-4'},
    'Gender': {0: 'Male', 1: 'Female'},
    '1960': {0: 5880, 1: 5980},
    '1961': {0: 5887, 1: 6887},
    '1962': {0: 6998, 1: 7998},
})

start_year = 1960
end_year = 1962
years_lst = list(map(str, range(start_year, end_year + 1)))
PakPopulation.loc[PakPopulation['Gender'] == "Female", years_lst] = \
    PakPopulation[years_lst].apply(lambda x: -x)

print(PakPopulation)

Output:

  Country Age Group  Gender  1960  1961  1962
0     XYZ       0-4    Male  5880  5887  6998
1     ABC       0-4  Female -5980 -6887 -7998

Upvotes: 1

Related Questions