大熊猫将数据从多个列重塑为单个列

时间:2019-01-30 19:37:57

标签: python pandas

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

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

我想重新格式化为:

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

2 个答案:

答案 0 :(得分:1)

似乎您没有做很多尝试,很难用您提供的内容真正地再现数据,但是其想法是让列具有正确的值而不是'x',并将数据框从宽格式转换为长格式。

columns_to_consider = ['Group1Name',  'Group2Name', ... ]
for column in columns_to_consider:
    df[column] = df[column].str.replace('X', column)
reshaped_df = pd.melt(df, id_vars=['Key', 'Date Added'], value_vars=columns_to_consider)

答案 1 :(得分:1)

applyaxis=1参数一起使用:

def group_func(series):
        values = []
        for val, idx in zip(series, series.index.values):
            if val is 'x':
                values += [str(idx)]
        return " ".join(values)

cols_to_agg = ['Group1Name', 'Group2Name', 'Group3Name', 'Group4Name']
df.loc[:,'Group'] = df.loc[:,cols_to_agg].apply(group_func, axis=1)