найти столбец со значением не-n и создать значение заполнения третьего столбца с именем столбца не-n - PullRequest
1 голос
/ 04 июня 2019

Для каждой строки я хочу найти, какие столбцы сначала имеют значение non-na, а другие столбцы удалить с помощью NaN.Затем создайте заполнение третьего столбца с именем столбца, отличного от na (изменено).

df
ID   groupA_b1   groupA_b2   groupB_b1   groupB_b2   groupC_b1   groupC_b2
1    3           3           NaN         NaN         NaN         NaN
2    4           5           NaN         NaN         NaN         NaN 
3    NaN         NaN         NaN         NaN         12          1
4    NaN         NaN         8           7           NaN         NaN
Expected output
ID   b1    b2   group
1    3     3    groupA     
2    4     5    groupA    
3    12    1    groupC
4    8     7    groupB    

Спасибо!

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Я использую stack после преобразования столбцов в несколько индексов на MultiIndex

s=df.set_index('ID')
s.columns=pd.MultiIndex.from_tuples(s.columns.str.split('_').map(tuple))
s.stack(level=0).reset_index()
Out[153]: 
   ID level_1    b1   b2
0   1  groupA   3.0  3.0
1   2  groupA   4.0  5.0
2   3  groupC  12.0  1.0
3   4  groupB   8.0  7.0
0 голосов
/ 04 июня 2019

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

df['group'] = df.set_index('ID').notnull().idxmax(1).tolist()

Выходы

ID
1    groupA_b1
2    groupA_b1
3    groupC_b1
4    groupB_b1
dtype: object

Если вы хотите только A, C и т. Д .:

df['group'].str.get(5)

0    A
1    A
2    C
3    B
Name: group, dtype: object
...