将多个列合并为一个,同时重复两列

时间:2015-03-12 16:37:32

标签: python numpy pandas

例如,我有一个csv表:

Name, Val1, Val2, Val3, Constant      
a,    0.1,  0.6,  1.1,  0.21      
b,    0.2,  0.7,  1.2,  0.22      
c,    0.3,  0.8,  1.3,  0.23      
d,    0.4,  0.9,  1.4,  0.24      
e,    0.5,  1.0,  1.5,  0.25

我想将第2,3和4列组合成一个新列(假设称为Val5),同时重复第1列和第5列中的值。这是输出的外观:

Name, Val5, Constant      
a,    0.1, 0.21   
b,    0.2, 0.22   
c,    0.3, 0.23   
d,    0.4, 0.24   
e,    0.5, 0.25       
a,    0.6, 0.21   
b,    0.7, 0.22   
c,    0.8, 0.23   
d,    0.9, 0.24   
e,    1.0, 0.25       
a,    1.1, 0.21   
b,    1.2, 0.22   
c,    1.3, 0.23   
d,    1.4, 0.24   
e,    1.5, 0.25

2 个答案:

答案 0 :(得分:1)

创建val5:

df['val5'] = #Whatever you want it to be

删除val1-3:

del df['val1']
del df['val2']
del df['val3']

答案 1 :(得分:0)

一种方法是pandas.melt(我想在您的数据中有一个Name列是索引,所以我在融化之前将其重置):

melted_df = df.reset_index().melt(
    ['Constant', 'Name'], ['Val1', 'Val2', 'Val3'], value_name='val5'
)
melted_df

Out:
    Constant Name variable  val5
0       0.21    a     Val1    0.1
1       0.22    b     Val1    0.2
2       0.23    c     Val1    0.3
3       0.24    d     Val1    0.4
4       0.25    e     Val1    0.5
5       0.21    a     Val2    0.6
6       0.22    b     Val2    0.7
7       0.23    c     Val2    0.8
8       0.24    d     Val2    0.9
9       0.25    e     Val2    1.0
10      0.21    a     Val3    1.1
11      0.22    b     Val3    1.2
12      0.23    c     Val3    1.3
13      0.24    d     Val3    1.4
14      0.25    e     Val3    1.5

因此,只需删除不必要的列(variable)并设置正确的索引列即可:

df = melted_df.set_index('Name')[['val5', 'Constant']]
df 

Out: 
      val5  Constant
Name                
a      0.1      0.21
b      0.2      0.22
c      0.3      0.23
d      0.4      0.24
e      0.5      0.25
a      0.6      0.21
b      0.7      0.22
c      0.8      0.23
d      0.9      0.24
e      1.0      0.25
a      1.1      0.21
b      1.2      0.22
c      1.3      0.23
d      1.4      0.24
e      1.5      0.25

希望有帮助

相关问题