我的df如下
name 0 1 2 3 4
0 alex NaN NaN aa bb NaN
1 mike NaN rr NaN NaN NaN
2 rachel ss NaN NaN NaN ff
3 john NaN ff NaN NaN NaN
melt函数应返回以下内容
name code
0 alex 2
1 alex 3
2 mike 1
3 rachel 0
4 rachel 4
5 john 1
任何建议都是有帮助的。谢谢。
答案 0 :(得分:1)
只需执行以下步骤:熔化,dropna,对列name
进行排序,重置索引并最终删除所有不需要的列
In [1171]: df.melt(['name'],var_name='code').dropna().sort_values('name').reset_index().drop(['index', 'value'], 1)
Out[1171]:
name code
0 alex 2
1 alex 3
2 john 1
3 mike 1
4 rachel 0
5 rachel 4
答案 1 :(得分:0)
这应该有效。
df.unstack().reset_index().dropna()
答案 2 :(得分:0)
df.set_index('name').unstack().reset_index().rename(columns={'level_0':'Code'}).dropna().drop(0,axis =1)[['name','Code']].sort_values('name')
输出将为
name Code
alex 2
alex 3
john 1
mike 1
rachel 0
rachel 4