Kalikan nilai tertentu dengan serangkaian kolom berdasarkan Kondisi di Pandas Dataframe

Saya memiliki data negara tertentu yang memberikan populasi kelompok umur tertentu dalam suatu rangkaian waktu. Saya mencoba mengalikan jumlah penduduk perempuan dengan -1 untuk menampilkannya di sisi lain grafik piramida. Saya telah mencapainya selama satu tahun yaitu tahun 1960 (lihat kode di bawah). Sekarang saya ingin mencapai hasil yang sama untuk semua kolom dari tahun 1960-2020

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

Saya juga sudah mencoba solusi berikut tetapi tidak berhasil:

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

Skema:

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

person AyyBeeShafi    schedule 23.04.2021    source sumber
comment
Gunakan: PakPopulation.iloc[:, 3: 4 + 2019 -1960].apply(lambda x:-x)? atau sederhananya -PakPopulation.iloc[:, 3: 4 + 2019 -1960]   -  person Amit Vikram Singh    schedule 23.04.2021
comment
Namun saya terkejut bagaimana kode Anda untuk 1960 tidak menimbulkan kesalahan. Di kiri, Anda hanya memilih baris dengan Gender = Female sedangkan di kanan Anda memiliki semua baris, sehingga panjangnya tidak cocok.   -  person Amit Vikram Singh    schedule 23.04.2021
comment
Di sebelah kiri dipilih semua baris tahun 1960 dimana Gender==Female dan di sebelah kanan dikalikan dengan -1   -  person AyyBeeShafi    schedule 23.04.2021
comment
LHS dan RHS memiliki panjang yang berbeda, tetapi entah bagaimana panda dapat mencocokkan indeks dan kemudian menetapkannya.   -  person Amit Vikram Singh    schedule 23.04.2021


Jawaban (1)


Anda dapat membuat daftar tahun dan menggunakan daftar itu sebagai bagian dari pilihan Anda:

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)

Keluaran:

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