【问题标题】:Python create new column from dictionary keysPython从字典键创建新列
【发布时间】:2017-07-31 23:30:11
【问题描述】:

我正在尝试学习使用 Python 进行数据科学,但遇到了以下问题。

假设我们有一个表单的数据框

和字典的形式

    Regions = {“Central Asia”: [“Afghanistan”], 
“Europe”: [“Albania”, “Andorra”], 
“Africa”: [“Algeria”], 
“America”: [“American Samoa”]}

我想在数据框中创建一个新列,其中该字典中的键是条目,如下所示:

在 Python 中有没有好的方法来做到这一点?

感谢您的帮助!!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以将mapdict 一起使用,其中键与值交换:

    d = {k: oldk for oldk, oldv in Regions.items() for k in oldv}
    print (d)
    {'Andorra': 'Europe', 'Afghanistan': 'Central Asia',
     'Algeria': 'Africa', 'American Samoa': 'America', 'Albania': 'Europe'}
    
    df['Region'] = df['country'].map(d)
    print (df)
              country        Region
    0     Afghanistan  Central Asia
    1         Albania        Europe
    2         Algeria        Africa
    3  American Samoa       America
    4         Andorra        Europe
    

    【讨论】:

      【解决方案2】:

      使用DataFrame.from_dictdf.stack() 的单列(感谢MaxU!):

      In [8]: pd.DataFrame.from_dict(Regions, orient='index').stack()\
                           .reset_index(level=0)\
                           .rename(columns={'level_0':'Region',0:'country'})\
                           .reset_index(drop=True)
      Out[8]: 
               Region         country
      0        Europe         Albania
      1        Europe         Andorra
      2        Africa         Algeria
      3  Central Asia     Afghanistan
      4       America  American Samoa
      

      【讨论】:

      • 怎么样:pd.DataFrame.from_dict(Regions, orient='index').stack().reset_index(level=0).rename(columns={'level_0':'Region',0:'country'}).reset_index(drop=True)
      • @MaxU 谢谢 :) 肯定更好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多