我有以下具有数字结果的数据集和几个表示数字结果标签的列
outcome tag1 tag2 tag3
340 a b a
123 a a b
23 d c b
54 c a c
我想通过根据列值(a,b,c ..)和相对结果值创建行来拆开数据集,例如:
tag outcome
a 340
a 123
a 54
b 340
b 124
b 23
c 23
d 54
如何?
谢谢!
答案 0 :(得分:0)
使用:
df1 = (df.melt('outcome', value_name='tag')
.sort_values('tag')
.drop('variable', axis=1)
.dropna(subset=['tag'])
.drop_duplicates()[['tag','outcome']])
说明:
melt
重塑sort_values
更改订单drop
删除列dropna
删除可能的缺失值drop_duplicates
删除重复项或者:
df1 = (df.set_index('outcome')
.stack()
.sort_values()
.reset_index(level=1, drop=True)
.reset_index(name='tag')
.drop_duplicates()[['tag','outcome']])
说明:
set_index
用stack
重塑Series
按sort_values
reset_index
-首先删除1级,然后创建列表单索引drop_duplicates
删除重复项print (df1)
tag outcome
0 a 340
1 a 123
7 a 54
4 b 340
9 b 123
10 b 23
3 c 54
6 c 23
2 d 23
答案 1 :(得分:0)
使用
In [321]: (df.set_index('outcome').unstack()
.reset_index(level=0, drop=True)
.sort_values()
.reset_index(name='tag')
.drop_duplicates())
Out[321]:
outcome tag
0 340 a
1 123 a
3 54 a
5 340 b
6 123 b
7 23 b
8 54 c
9 23 c
11 23 d