Aur*_*ora 5 python unpivot dataframe pandas
我有一张这样的桌子
   user         company company2 company3 company4
    1           Mac     Lenovo    Hp      null              
    2           Mac       MSI     Sony                          
Run Code Online (Sandbox Code Playgroud)
使用熊猫我希望它是
     user    company
     1          Mac
     1          Lenovo
     1          Hp
     2         Mac
Run Code Online (Sandbox Code Playgroud)
等等在这里我尝试了但是没有使用pandas pivot.
dataframe = pd.read_csv('data.csv')
dataframe.fillna(value='', inplace=True)
#dataframe.pivot(index='user', columns='company')
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用并给出错误.
你可以使用pd.melt方法:
In [211]: pd.melt(df, id_vars='user', value_vars=df.columns.drop('user').tolist())
Out[211]:
   user  variable   value
0     1   company     Mac
1     2   company     Mac
2     1  company2  Lenovo
3     2  company2     MSI
4     1  company3      Hp
5     2  company3    Sony
6     1  company4    null
7     2  company4     NaN
Run Code Online (Sandbox Code Playgroud)
要么
In [213]: pd.melt(df,
                  id_vars='user', value_vars=df.columns.drop('user').tolist(),
                  value_name='Company') \
            .drop('variable',1)
Out[213]:
   user Company
0     1     Mac
1     2     Mac
2     1  Lenovo
3     2     MSI
4     1      Hp
5     2    Sony
6     1    null
7     2     NaN
Run Code Online (Sandbox Code Playgroud)
更新:删除NaN并通过user以下方式对结果DF进行排序:
In [218]: pd.melt(df,
     ...:         id_vars='user', value_vars=df.columns.drop('user').tolist(),
     ...:         value_name='Company') \
     ...:   .drop('variable',1) \
     ...:   .dropna() \
     ...:   .sort_values('user')
     ...:
Out[218]:
   user Company
0     1     Mac
2     1  Lenovo
4     1      Hp
6     1    null
1     2     Mac
3     2     MSI
5     2    Sony
Run Code Online (Sandbox Code Playgroud)
PS如果你想摆脱null价值 - 使用df.replace('null', np.nan)而不是df:
In [219]: pd.melt(df.replace('null', np.nan),
     ...:         id_vars='user', value_vars=df.columns.drop('user').tolist(),
     ...:         value_name='Company') \
     ...:   .drop('variable',1) \
     ...:   .dropna() \
     ...:   .sort_values('user')
     ...:
Out[219]:
   user Company
0     1     Mac
2     1  Lenovo
4     1      Hp
1     2     Mac
3     2     MSI
5     2    Sony
Run Code Online (Sandbox Code Playgroud)