如何在python中转换为整齐的格式?

时间:2019-06-19 22:23:57

标签: python pandas

我的pandas数据帧具有单独的一列,这些列是经过一键编码的,最后有一个总列将它们加起来(total = val1 + val2)。

某些行的多个val列为1:

| name | val1 | val2 | total | 
| joe  | 1    | 0    | 1     |
| bob  | 0    | 1    | 1     |
| dan  | 1    | 1    | 2     |

我想要这个:

| name | val1 | val2 | total | 
| joe  | 1    | 0    | 1     |
| bob  | 0    | 1    | 1     |
| dan  | 1    | 0    | 1     |
| dan  | 0    | 1    | 1     |

我不知道该如何工作:以总列为条件融化它。

每行的最终结果总值为1。

2 个答案:

答案 0 :(得分:2)

d = df.drop('total', axis=1).set_index('name').stack().loc[lambda x: x == 1]

n, v = zip(*d.index)
pd.concat([pd.Series(n, name='name'), pd.get_dummies(v).assign(total=1)], axis=1)

  name  val1  val2  total
0  joe     1     0      1
1  bob     0     1      1
2  dan     1     0      1
3  dan     0     1      1

答案 1 :(得分:1)

比我想象的还要硬

s1=df.iloc[:,1:-1]
s2=df.iloc[:,0]
df[['name']].join(s1.mul(s2,0).replace('',np.nan).stack().reset_index(level=1)['level_1'].str.get_dummies(),how='right').assign(Total=1)
Out[413]: 
  name  val1  val2  Total
0  joe     1     0      1
1  bob     0     1      1
2  dan     1     0      1
2  dan     0     1      1
相关问题