将多列合并为单列,并将列名作为值

时间:2019-01-30 18:43:04

标签: python pandas

我有一个数据集,我想重整部分结果。数据集总是从前几列开始,然后是可变数量的对数据进行分组的列。如果密钥属于该组,则将用x标记。每个密钥不会属于多个组。数据结构如下:

Key  Date Added Group1Name Group2Name Group3Name ... GroupXName
1    1/1/2018   x
2    1/1/2018               x
3    1/1/2018                          x
4    1/1/2018   x 
5    1/1/2018                                         x

我想重新格式化为:

Key  Date Added Group
1    1/1/2018   Group1Name
2    1/1/2018   Group2Name           
3    1/1/2018   Group3Name     
4    1/1/2018   Group1Name
5    1/1/2018   GroupXName

1 个答案:

答案 0 :(得分:3)

我们首先可以将其转换为易于使用的二进制格式:

group_cols = df.columns.difference(["Key", "Date Added"])
df[group_cols] = df[group_cols].replace({"":0, "x":1})

然后在轴1上获得最大id,即我们具有最高值的列,该值为1

df["Group"] = df[group_cols].idxmax(axis=1)

和删除原始列

df = df.drop(group_cols, axis=1)