熊猫数据帧中的成对融解

问题描述 投票:1回答:2

我想配对创建一个新的数据框。我尝试使用MELT,但实际上没有用。如果您发现列是成对的(即code:type,code1:type1)我尝试创建代码列列表和类型列列表,然后合并。

您如何建议这个问题?如果能给出一些解释,我将不胜感激。

原始数据帧:

id   Name  code code1 code2  type type1 type2
 0    ABC    1      4     8   S     E      T
 1    XYZ    2            5   R            U

期望的数据帧

id name  Code_All Type_All
0   ABC      1      S
0   ABC      4      E
0   ABC      8      T
1   XYZ      2      R
1   XYZ               
1   XYZ      5      U
python pandas dataframe melt
2个回答
0
投票

这里的问题是,pd.wide_to_long没有明确的后缀(每个组的第一个条目都没有后缀),因此先修改列,然后再应用pd.wide_to_long

pd.wide_to_long

m  = df.set_index(['id','Name'])
cols = m.columns.str.replace('\d+','').to_series()
m.columns=cols.add(cols.groupby(cols).cumcount().astype(str))

out = (pd.wide_to_long(m.reset_index(),['code','type'],['id','Name'],'idx')
                                              .reset_index(['id','Name']))

重现数据帧的代码:

     id Name  code type
idx                    
0     0  ABC   1.0    S
1     0  ABC   4.0    E
2     0  ABC   8.0    T
0     1  XYZ   2.0    R
1     1  XYZ   NaN  NaN
2     1  XYZ   5.0    U

0
投票

经过几个令人沮丧的小时后,我能够使用一个肮脏的把戏完成此任务。

我将数据集一分为二。

d = {'id': {0: 0, 1: 1}, 'Name': {0: 'ABC', 1: 'XYZ'}, 'code': {0: 1, 1: 2}, 'code1': {0: 4.0, 1: np.nan}, 'code2': {0: 8, 1: 5}, 'type': {0: 'S', 1: 'R'}, 'type1': {0: 'E', 1: np.nan}, 'type2': {0: 'T', 1: 'U'}} df = pd.DataFrame(d)

id, name, code1, code2, code3

我调换了两个数据帧

[第一个数据帧的示例。

id, name, type1, type2, type3

id, name, code1

id, name, code2

使用pd.concat([df1.df2],axix = 1)我可以将其连接并删除NULL值。

© www.soinside.com 2019 - 2024. All rights reserved.