对于每一行,我想首先查找具有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
谢谢!
答案 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
如果只需要A
,C
等
df['group'].str.get(5)
0 A
1 A
2 C
3 B
Name: group, dtype: object