Python 将dataframe列值提取为独立列

Python 将dataframe列值提取为独立列,python,pandas,dataframe,pivot,pivot-table,Python,Pandas,Dataframe,Pivot,Pivot Table,我有一个熊猫数据框,定义如下: df = pd.DataFrame({'Country': ['US', 'US', 'CA', 'CA', 'BE', 'BE', 'BE', 'MX'], 'Language': ['en', 'es', 'en', 'fr', 'nl', 'fr', 'de', 'es']}) 我想透视/转换这个数据帧,这样language列下的值就可以组成单独的列,如 做这件事最干净、最简单的方法是什么?我会分配一个新列,并基

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

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

我想透视/转换这个数据帧,这样language列下的值就可以组成单独的列,如


做这件事最干净、最简单的方法是什么?

我会分配一个新列,并基于该列进行透视:

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。

我将分配一个新列,并基于该列进行透视:

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。

您也可以尝试此方法

df = pd.DataFrame({'Country': ['US', 'US', 'CA', 'CA', 'BE', 'BE', 'BE', 'MX'], 
               'Language': ['en', 'es', 'en', 'fr', 'nl', 'fr', 'de', 'es']})
首先使用
groupby
unique()
查找每个国家/地区的唯一语言


你也可以试试这个

df = pd.DataFrame({'Country': ['US', 'US', 'CA', 'CA', 'BE', 'BE', 'BE', 'MX'], 
               'Language': ['en', 'es', 'en', 'fr', 'nl', 'fr', 'de', 'es']})
首先使用
groupby
unique()
查找每个国家/地区的唯一语言