【问题标题】:Extract dataframe column values as standalone columns将数据框列值提取为独立列
【发布时间】:2018-01-09 20:05:31
【问题描述】:

我有一个 pandas 数据框,定义如下:

df = pd.DataFrame({'Country': ['US', 'US', 'CA', 'CA', 'BE', 'BE', 'BE', 'MX'], 
                   'Language': ['en', 'es', 'en', 'fr', 'nl', 'fr', 'de', 'es']})

我想旋转/转换此数据框,以便语言列下的值构成单独的列,例如

最干净、最像熊猫的方式是什么?

【问题讨论】:

    标签: python pandas dataframe pivot pivot-table


    【解决方案1】:

    我将分配一个新列并根据该列进行数据透视:

    df.assign(
        lang_id='Lang' + df.groupby('Country').cumcount().add(1).astype('str')
        ).pivot(index='Country', columns='lang_id', values='Language').reset_index()
    
    lang_id Country Lang1 Lang2 Lang3
    0            BE    nl    fr    de
    1            CA    en    fr  None
    2            MX    es  None  None
    3            US    en    es  None
    

    另一种选择是:

    df.groupby('Country')['Language'].apply(list).apply(pd.Series).reset_index()
    Out: 
      Country   0    1    2
    0      BE  nl   fr   de
    1      CA  en   fr  NaN
    2      MX  es  NaN  NaN
    3      US  en   es  NaN
    

    对于这两种情况,您可以在最后调用 fillna('') 以用空字符串填充 NaN。

    【讨论】:

      【解决方案2】:

      你也可以试试这个。

      df = pd.DataFrame({'Country': ['US', 'US', 'CA', 'CA', 'BE', 'BE', 'BE', 'MX'], 
                     'Language': ['en', 'es', 'en', 'fr', 'nl', 'fr', 'de', 'es']})
      

      首先使用groupbyunique() 为每个国家/地区找到独特的语言。

      df2 = pd.DataFrame(df.groupby(["Country"])["Language"].unique().reset_index())
      
      # df2
      #   Country     Language
      # 0     BE     [nl, fr, de]
      # 1     CA     [en, fr]
      # 2     MX     [es]
      # 3     US     [en, es]
      
      # Then split Language column into 3 columns
      langs = df2.Language.values.tolist()).add_prefix('Lang')
      
      # concat two df to get the desired output
      pd.concat([df2.Country, langs], axis=1)
      
            Country  Lang0    Lang1   Lang2
        0     BE      nl      fr      de
        1     CA      en      fr      None
        2     MX      es      None    None
        3     US      en      es      None
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        相关资源
        最近更新 更多