我有多个列,我想将它们合并为一个。另一个困难是动物(例如狗)可以有多个代码(因此字符串连接不起作用)。
我尝试过数据透视、堆叠、取消堆叠,但多个值列让我难以理解。
原始数据帧:
动物 | 代码_X | 代码_Y | Code_Z | 值1 | Value2 | Value3 |
---|---|---|---|---|---|---|
猫 | 111 | $3 | $3 | $3 | ||
狗 | 222 | 333 | $4 | $4 | $4 | |
鼠标 | 444 | $5 | $5 | $5 | ||
狐狸 | 555 | 666 | $6 | $6 | $6 |
所需的数据帧:
动物 | 代码 | 值1 | Value2 | Value3 |
---|---|---|---|---|
猫 | 111 | $3 | $3 | $3 |
狗 | 222 | $4 | $4 | $4 |
狗 | 333 | $4 | $4 | $4 |
鼠标 | 444 | $5 | $5 | $5 |
狐狸 | 555 | $6 | $6 | $6 |
狐狸 | 666 | $6 | $6 | $6 |
有没有办法一次性做到这一点?我的最后一个结果是创建一个具有所需标题的新数据框并使用 df.append()
。
答案 0 :(得分:3)
试试:
df.melt(['Animal', 'Value1', 'Value2', 'Value3'], value_name='Code')\
.dropna(subset=['Code'])\
.drop('variable', axis=1)
输出:
Animal Value1 Value2 Value3 Code
0 Cat $3 $3 $3 111.0
3 Fox $6 $6 $6 555.0
5 Dog $4 $4 $4 222.0
6 Mouse $5 $5 $5 444.0
7 Fox $6 $6 $6 666.0
9 Dog $4 $4 $4 333.0