我有一個名為 trade_lanes 的 pandas 資料框,它顯示以下輸出:
| 出發國 | 到達國家 |
|---|---|
| 馬來西亞 | 波蘭 |
| 德國 | 美國 |
| 德國 | 喀麥隆 |
| 阿根廷 | 越南 |
| 阿爾及利亞 | 斯洛伐克 |
| 中國 | 越南 |
| 丹麥 | 新加坡 |
我想做的是根據國家/地區創建 2 個新列:資料框 trade_lanes 中的“出發地區”和“到達地區”,使其看起來像這樣作為輸出:
| 出發地區 | 出發國 | 到達地區 | 到達國家 |
|---|---|---|---|
| 亞太地區 | 馬來西亞 | NECE | 波蘭 |
| NECE | 德國 | 美洲 | 美國 |
| NECE | 德國 | WEMEA | 喀麥隆 |
| 美洲 | 阿根廷 | 亞太地區 | 越南 |
| WEMEA | 阿爾及利亞 | NECE | 斯洛伐克 |
| 亞太地區 | 中國 | 亞太地區 | 越南 |
| NECE | 丹麥 | 亞太地區 | 日本 |
| 其他 | 湯加 | 亞太地區 | 印度尼西亞 |
我一直在使用回圈來解決這個問題,但我認為我的流程是錯誤的,因為有一個國家被標記為區域的情況,這使得它變得更加復雜。另請注意,我認為我需要使用 For-if-elif-else 回圈,因為如果某些國家/地區不屬于區域范圍,我會將它們標記為“其他”。
我正在考慮復制“出發國家”和“到達國家”列,然后手動替換它,但我很確定使用 for 回圈有更簡單的方法。
這就是我嘗試的:
for elements in range(len(trade_lane)):
apac = {"AUSTRALIA": "APAC", "BANGLADESH": "APAC",
"CHINA": "APAC", "HONG KONG": "APAC",
"INDIA": "APAC", "INDONESIA": "APAC",
"JAPAN": "APAC", "MALAYSIA": "APAC",
"MALAYSIA": "APAC", "NEW ZEALAND": "APAC",
"SINGAPORE": "APAC", "KOREA": "APAC",
"TAIWAN": "APAC", "THAILAND": "APAC", "VIET NAM": "APAC"}
nece = {"BELGIUM": "NECE", "CZECH REPUBLIC": "NECE",
"DENMARK": "NECE", "GERMANY": "NECE", "HUNGARY": "NECE",
"LUXEMBOURG": "NECE", "NETHERLANDS": "NECE",
"NORWAY": "NECE", "POLAND": "NECE", "ROMANIA": "NECE",
"SLOVAKIA": "NECE", "SWEDEN": "NECE", "TURKEY": "NECE"}
wemea = {"ALGERIA": "WEMEA", "BAHRAIN": "WEMEA",
"CAMEROON": "WEMEA", "CHAD": "WEMEA", "FRANCE": "WEMEA",
"GREECE": "WEMEA", "IRISH REPUBLIC": "WEMEA",
"ITALY": "WEMEA", "MOROCCO": "WEMEA",
"PORTUGAL": "WEMEA", "QATAR": "WEMEA",
"SAUDI ARABIA": "WEMEA", "SOUTH AFRICA": "WEMEA",
"SPAIN": "WEMEA", "TUNISIA": "WEMEA", "UGANDA": "WEMEA",
"UNITED ARAB EMIRATES": "WEMEA", "UNITED KINDGOM":"WEMEA"}
americas = {"ARGENTINA": "AMERICAS", "BRAZIL": "AMERICAS",
"CANADA": "AMERICAS", "CHILE": "AMERICAS",
"COLOMBIA": "AMERICAS", "MEXICO": "AMERICAS",
"PERU": "AMERICAS", "UNITED STATES": "AMERICAS"}
for x,y in apac.items():
trade_lane["Departure Region"].values = trade_lane["Departure Country"].values[elements].replace(x,y)
trade_lane
但是我得到一個 KeyError: 'Departure Region'
uj5u.com熱心網友回復:
假設您的資料框交易通道稱為 df:
all_regions = {**apac, **nece, **wemea, **americas} # merge your dictionaries into one
df['Departure Region'] = df['Departure Country'].map(all_regions) #map countries to regions
df['Departure Region'] = df['Departure Region'].fillna('Others') #If any country not found in the map
您可以對“到達區域”執行相同的程序。
這個的for回圈版本可能是:
all_regions = {**apac, **nece, **wemea, **americas} # merge your dictionaries into one
temp = []
for i,row in df.iterrows():
if row['Departure Country'] in all_regions:
temp.append(all_regions[row['Departure Country']])
#else if: # add here corner cases.
# do something
else:
temp.append('Others')
df['Departure Region'] = temp
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417781.html
標籤:
上一篇:for回圈中的字典無法按預期作業
