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
我有一个数据框:
我需要像这样将其转换为最终结果
我需要根据最后 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