没有多层的dstack

dstack with no multiple layers

我有以下数据集,其中包含数字结果和代表数字结果标签的几列

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

怎么办?

谢谢!

使用:

df1 = (df.melt('outcome', value_name='tag')
      .sort_values('tag')
      .drop('variable', axis=1)
      .dropna(subset=['tag'])
      .drop_duplicates()[['tag','outcome']])

解释:

  1. 重塑 melt
  2. sort_values
  3. 更改顺序
  4. drop
  5. 删除列
  6. 通过dropna
  7. 删除可能的缺失值
  8. 上次删除重复项 drop_duplicates

或者:

df1 = (df.set_index('outcome')
       .stack()
       .sort_values()
       .reset_index(level=1, drop=True)
       .reset_index(name='tag')
       .drop_duplicates()[['tag','outcome']])

解释:

  1. 重塑 set_index with stack
  2. Seriessort_values
  3. 排序
  4. Double reset_index - 首先删除级别 1,然后创建列形式索引
  5. 上次删除重复项 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

使用

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