Python 将多个列合并到单个列中,列的名称作为值

Python 将多个列合并到单个列中,列的名称作为值,python,pandas,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。每个密钥不属于多个组。数据结构如下所示:

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

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

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)

这种方法是否可以修改,也可以考虑密钥有多个组名的可能性?也就是说,您会在同一行中得到Group1Name和Group2?我认为最简单的方法是创建组合列,然后使用相同的方法。i、 e.构造一个名为“Group1Name,Group2”的列,其值为Group1Name+Group2。这可能有点棘手,因此可能值得作为另一个问题提出