查找具有非na值的列,并使用非na列的名称创建第三个列填充值

时间:2019-06-04 01:12:33

标签: python pandas dataframe null multiple-columns

对于每一行,我想首先查找具有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 个答案:

答案 0 :(得分:1)

通过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

答案 1 :(得分:0)

使用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

如果只需要AC

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

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