簡體   English   中英

如何在 Python 中根據 dict 替換 Pandas 列值?

[英]How to replace Pandas column values based on dict in Python?

我有以下熊貓 DF:

ID Country
----------
01 "it"
02 "es"
03 "de"
04 "ch"
05 "in"
06 "ca"

我想將 2 個字母的國家/地區代碼替換為適當的大陸名稱,如下所示:

ID Country
----------
01 "europe"
02 "europe"
03 "europe"
04 "asia"
05 "asia"
06 "america"

我收集了一個字典,其中鍵為大陸名稱,值作為屬於各個大陸的國家代碼列表:

> country_dict

{'europe': ['it', 'es', 'de', 'gb'],
 'asia': ['in', 'ch', 'ru'],
 'america': ['us', 'ca']}

到目前為止我能做的最好的:

for continent in country_dict.keys():
   df.Country.replace(country_dict[continent], continent)

但這似乎不太優雅。 有更好的主意嗎?

你的 dict 是倒退的。

>>> import pandas as pd
>>> df = pd.DataFrame(['it', 'es'], columns=['Country'])
>>> df
  Country
0      it
1      es
>>> country_dict = {'europe': ['it', 'es', 'de', 'gb'],
 'asia': ['in', 'ch', 'ru'],
 'america': ['us', 'ca']}
>>> country_dict = {v: k for k, vs in country_dict.items() for v in vs}
>>> country_dict
{'it': 'europe', 'es': 'europe', 'de': 'europe', 'gb': 'europe', 'in': 'asia', 'ch': 'asia', 'ru': 'asia', 'us': 'america', 'ca': 'america'}
>>> df.replace(country_dict)
  Country
0  europe
1  europe

更改country_dict基值和鍵然后使用pandas.Series.map可能會很棘手:

>>> dct = {v:k  for k,val in country_dict.items() for v in val}
>>> df['Country'] = df['Country'].map(dct)
>>> df

    Country
0   europe
1   europe
2   europe
3     asia
4     asia
5  america

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM