我有一個熊貓資料框,它包含 5000 行不同國家和排放資料,如下所示:
| 國家 | 年 | 排放量 |
|---|---|---|
| 秘魯 | 2020 | 1000 |
| 2019 | 900 | |
| 2018 | 800 |
國家標簽是一個索引。
例如。 df = emission.loc[['peru']]
會給我一個新的資料框,只包含附在秘魯的排放資料。我的目標是使用變數名而不是“秘魯”,并將特定國家/地區的排放資料存盤到一個新的資料框中。
我搜索的是與以下代碼相同的代碼:
country = 'zanzibar'
df = emissions.loc[[{country}]]
據我所知,問題出在 iloc 函式不接受變數作為輸入。有沒有辦法可以規避這個問題?
換句話說,我希望能夠創建一個包含國家特定排放資料的新資料框,基于與我emission.index()所有國家之一匹配的變數,而無需更改給定變數以外的任何內容。
一種方法可能是迭代或以某種方式創建一個函式?預先感謝您的任何幫助。
uj5u.com熱心網友回復:
您應該能夠為您的索引選擇某個字串。例如:
df = pd.DataFrame({'a':[1,2,3,4]}, index=['Peru','Peru','zanzibar','zanzibar'])
country = 'zanzibar'
df.loc[{country}]
這將回傳:
a
zanzibar 3
zanzibar 4
在您的情況下,洗掉一組方括號應該有效:
country = 'zanzibar'
df = emissions.loc[{country}]
uj5u.com熱心網友回復:
您不使用國家/地區名稱作為索引的另一種方法:
emissions = pd.DataFrame({'Country' : ['Peru', 'Peru', 'Peru', 'Chile', 'Chile', 'Chile'], "Year" : [2021,2020,2019,2021,2020,2019], 'Emissions' : [100,200,400,300,200,100]})
country = 'Peru'
然后過濾:
df = emissions[emissions.Country == country]
或者
df = emissions.loc[emissions.Country == country]
給予:
Country Year Emissions
0 Peru 2021 100
1 Peru 2020 200
2 Peru 2019 400
uj5u.com熱心網友回復:
我不知道這個解決方案是否與您的問題相同。在這種情況下,我將給出將國家名稱變為變數的解決方案
但是,由于變數名不能用空格(“”)字符命名,所以您必須將空格字符替換為下劃線(“_”)字符。
(以防萬一您的“國家”值有一些使用多個單詞的國家/地區名稱)
例子:
英國飛往 United_Kingdom
通過使用此代碼:
df['country'] = df['country'].replace(' ', '_', regex=True)
因此,在您的國家/地區名稱更改為新格式后,您可以使用以下代碼將所有國家/地區名稱從資料框中獲取到串列中,.unique()并且可以將其存盤到新變數中:
country_name = df['country'].unique()
完成該代碼后,“國家”列中的所有唯一值都存盤到名為“國家名稱”的串列變數中
下一個,
使用for以下代碼進行迭代以按國家/地區名稱生成新變數:
for i in country_name:
locals()[i] = df[df['country']=="%s" %(i)]
因此,locals()這里用于將字串格式轉換為非字串格式(因為在 'country_name' 串列中由字串格式的國家名稱填充)并df[df['country']=="%s" %(i)]用于通過條件 country = 來自 'country_name' 的每個唯一值來對資料框進行子集化.
之后,它已經為“國家”列中的每個國家名稱創建了一個新變數。
希望這可以幫助解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/415520.html
標籤:
上一篇:3個月日期間隔回圈
