Панды - Изменить выравнивание данных - PullRequest
0 голосов
/ 09 октября 2018

Я создал фрейм данных:

In [1]: import pandas as pd 

In [2]: import numpy as np

In [3]: df = pd.DataFrame({ 'Student_ID':['001','002','003','004','005'],
                'Amy'   : ['Amy',np.nan,np.nan,np.nan,'Amy'],
                'Brian' : [np.nan,'Brian',np.nan,np.nan,np.nan],
                'Cat'   : [np.nan,np.nan,np.nan,'Cat',np.nan]},columns=['Student_ID','Amy','Brian','Cat']) 


In  [4]:df
Out [4]:
    Student_ID  Amy Brian   Cat
0          001  Amy   NaN   NaN
1          002  NaN Brian   NaN
2          003  NaN   NaN   NaN
3          004  NaN   NaN   Cat
4          005  Amy   NaN   NaN

И затем я хотел бы вернуться к фрейму данных только с двумя столбцами: Student_ID и Name.Как конвертировать в ниже в точных кодах?

In [5]: df
Out[5]: 
  Student_ID    Name    
0        001     Amy    
1        002   Brian    
2        003     NaN    
3        004     Cat
4        005     Amy    

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Использование .lookup

df['Name'] = df.lookup(df.index, df.iloc[:, 1::].notnull().idxmax(1))

  Student_ID  Amy  Brian  Cat   Name
0        001  Amy    NaN  NaN    Amy
1        002  NaN  Brian  NaN  Brian
2        003  NaN    NaN  NaN    NaN
3        004  NaN    NaN  Cat    Cat
4        005  Amy    NaN  NaN    Amy
0 голосов
/ 09 октября 2018

Вы можете использовать groupby/first, поскольку first выбирает первый элемент, отличный от NaN, в каждой группе:

In [146]: df.set_index('Student_ID').unstack().groupby(level='Student_ID').first().rename('Name').reset_index()
Out[146]: 
  Student_ID   Name
0        001    Amy
1        002  Brian
2        003    NaN
3        004    Cat
4        005    Amy
0 голосов
/ 09 октября 2018

Вы можете использовать dot

df.iloc[:,1:].notna().dot(df.columns[1:])
Out[78]: 
0      Amy
1    Brian
2         
3      Cat
4      Amy
dtype: object
#df['name']=df.iloc[:,1:].notna().dot(df.columns[1:])

Или bfill

df.iloc[:,1:].bfill(1).iloc[:,0]
Out[82]: 
0      Amy
1    Brian
2      NaN
3      Cat
4      Amy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...