标准化多值列

时间:2019-10-21 14:05:19

标签: python pandas numpy

我有这样的数据集:

data = {'Host': ['A','A','A', 'A'], 'Seq': ['0, 1, 2, 99',' 4, 5, 6', '999, 8', '100']}

df = pd.DataFrame(data)

我要规范所有值。

首先我要保持这种形状:

host Seq
 A    0
 A    1
 A    2
 A    99
 A    4
 A    5
 A    6
 A    999
 A    8
 A    100

通过此代码:

df.join(df.pop('Seq')
                .str.split(',',expand=True)
                .stack()
                .reset_index(level=1, drop=True)
                .rename('Seq')).reset_index(drop=True)

通过StandartScaler进行规范化之后:

df['Seq'] = scaler.fit_transform(np.array(df.Seq.values).reshape(-1, 1)).reshape(-1)

现在我不知道如何返回开始视图。 等待想法和评论

1 个答案:

答案 0 :(得分:3)

假设您没有破坏原始文档中的索引信息

d_ = df.assign(Seq=df.Seq.str.split(',\s*')).explode('Seq')

d_

  Host  Seq
0    A    0
0    A    1
0    A    2
0    A   99
1    A    4
1    A    5
1    A    6
2    A  999
2    A    8
3    A  100

然后您可以按索引和'Host'列进行分组

d_.groupby([d_.index, 'Host']).Seq.apply(', '.join).reset_index('Host')

  Host          Seq
0    A  0, 1, 2, 99
1    A      4, 5, 6
2    A       999, 8
3    A          100