在pandas数据帧中组合多个具有相同名称的列

时间:2018-04-29 02:28:08

标签: python pandas dataframe

我有以下数据框:

pp  b          pp   b
5   0.001464    6   0.001853
5   0.001459    6   0.001843

有没有办法合并具有相同名称的列?我只想把它作为输出:

pp  b         
5   0.001464    
5   0.001459    
6   0.001853
6   0.001843

4 个答案:

答案 0 :(得分:4)

使用numpy

可以实现
res = pd.DataFrame({'pp': df['pp'].values.T.ravel(),
                    'b': df['b'].values.T.ravel()})

print(res)

          b  pp
0  0.001464   5
1  0.001459   5
2  0.001853   6
3  0.001843   6

或者没有明确引用特定列:

res = pd.DataFrame({i: df[i].values.T.ravel() for i in set(df.columns)})

答案 1 :(得分:3)

让我们使用melt,cumcount和unstack:

dm = df.melt()
dm.set_index(['variable',dm.groupby('variable').cumcount()])\
  .sort_index()['value'].unstack(0)

输出:

variable         b   pp
0         0.001464  5.0
1         0.001459  5.0
2         0.001853  6.0
3         0.001843  6.0

答案 2 :(得分:3)

尝试使用轴= 1

groupby
df.groupby(df.columns.values, axis=1).agg(lambda x: x.values.tolist()).sum().apply(pd.Series).T.sort_values('pp')
Out[320]: 
          b   pp
0  0.001464  5.0
2  0.001459  5.0
1  0.001853  6.0
3  0.001843  6.0

wide_to_long

的有趣方式
s=pd.Series(df.columns)
df.columns=df.columns+s.groupby(s).cumcount().astype(str)

pd.wide_to_long(df.reset_index(),stubnames=['pp','b'],i='index',j='drop',suffix='\d+')
Out[342]: 
            pp         b
index drop              
0     0      5  0.001464
1     0      5  0.001459
0     1      6  0.001853
1     1      6  0.001843

答案 3 :(得分:1)

让我感到有些惊讶的是,到目前为止,没有人提到使用pd.concat ...下面来看看:

function CurrentTime(e){
  player.getCurrentTime().then(function(seconds) {
    seconds = Math.floor(seconds);
    post_data = { $result : seconds , $title : e};   
      $.ajax({
        method: 'post',
        dataType: 'text',
        data: post_data,
        url: '../includes/php/send_user_video.php',
          success: function (data) {
          }
        });
  }).catch(function(error) {console.log(error)});
}

现在,如果您这样做:

df1 = pd.DataFrame({'Col1':[1,2,3,4], 'Col2':[5,6,7,8]})
df1
      Col1  Col2
   0     1     5
   1     2     6
   2     3     7
   3     4     8 

您得到:

   df2 = pd.concat([df1,df1])

这就是您想要的,不是吗?