Pandas 在不使用 melt 函数的情况下重塑数据框

Pandas Reshape dataframe without using melt function

我有一个数据框:

我需要像这样将其转换为最终结果

我需要根据最后 3 列的值为 1 的行名称和 ID,如图所示。可以使用 pandas melt 函数来完成,但我期待不使用该库。

怎么做到的??

melt 专为这些操作而设计,但另一种方法是使用 set_index() 在 id 和名称上设置索引,然后使用 stack:

df.set_index(['id','name']).stack()\
                           .reset_index(name='val')\
                           .query('val == 1')\
                           .rename({'level_2':'language'},axis=1)\
                           .drop('val',axis=1)

打印:

   id    name language
0   1    Alex   python
1   1    Alex     java
2   1    Alex    mysql
3   2  Herald   python
5   2  Herald    mysql
6   3    Jack   python
9   4    Mike   python