将数据帧列合并到新数据帧中

时间:2017-12-08 01:19:42

标签: python pandas

我是pandas的新手并且正在使用DataFrames。我正在查看Merge,Join,Concatenate的文档,它可能正好盯着我看,但我仍然无法按照我需要的方式转换数据。

我的数据看起来像这样(R行x 4302列):

| w:350 |       r:350 | w:351 |   r:351 |  ...  | w:2499 |      r:2499 | w:2500 |  r:2500 |
-------------------------------------------------------------------------------------------
|   350 | -3.0998e-04 |   351 |  0.0001 |  ...  |   2499 | -3.6000e-05 |   2500 |  0.0004 |
|   350 | -1.8316e-03 |   351 | -0.0008 |  ...  |   2499 | -3.1124e-04 |   2500 | -0.0004 |
|   350 | -1.0520e-03 |   351 | -0.0014 |  ...  |   2499 |  4.0166e-04 |   2500 |  0.0012 |
|   350 | -3.4060e-04 |   351 |  0.0006 |  ...  |   2499 |  1.2782e-03 |   2500 |  0.0012 |

我希望看起来像这样(X行x 2列):

|     x |           y |
-----------------------
|   350 | -3.0998e-04 |
|   350 | -1.8316e-03 |
|   350 | -1.0520e-03 |
|   350 | -3.4060e-04 |
|   351 |      0.0001 |
|   351 |     -0.0008 |
|   351 |     -0.0014 |
|   351 |      0.0006 |
...
|  2499 | -3.6000e-05 |
|  2499 | -3.1124e-04 |
|  2499 |  4.0166e-04 |
|  2499 |  1.2782e-03 |
|  2500 |      0.0004 |
|  2500 |     -0.0004 |
|  2500 |      0.0012 |
|  2500 |      0.0012 |

我猜你可以把它想象成多组x,y数据行的DataFrame,我希望将它组合成一组x,y数据行的DataFrame。或者换句话说,每行当前是x,y数据的图形。我需要所有图表的x,y数据的单一集合。

我试过这个,但它没有用(可能是因为列名不相同)。它也可能不是我做我想做的最有效的方式。这里output是我的原始数据,outputxy是我想要的转置数据。

outputxy = pandas.DataFrame()
for i in range(0, len(output.columns), 2):
    outputxy = pandas.concat([output.iloc[:, i:i+2], outputxy])

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我们可以使用wide_to_long,如果您需要列名为x,y,则可以rename

PS:此方法不需要列的顺序。

pd.wide_to_long(df.reset_index(),stubnames=['w','r'],i='index',j='drop',sep=':').reset_index(drop=True)
Out[205]: 
     w         r
0  350 -0.000310
1  350 -0.001832
2  350 -0.001052
3  350 -0.000341
4  351  0.000100
5  351 -0.000800
6  351 -0.001400
7  351  0.000600

答案 1 :(得分:1)

可以使用如下所示的熔化和滴落

df =  '''
w1  r1 w2 r2
1  14 4  23
2  15 5 32
3  16 6 33
'''

df1 = pd.DataFrame()
df1['X'] = pd.melt(df.iloc[:,::2]).drop('variable',1)
df1['Y'] = pd.melt(df.iloc[:,1::2]).drop('variable',1)

print df1

  X   Y
0  1  14
1  2  15
2  3  16
3  4  23
4  5  32
5  6  33

答案 2 :(得分:0)

您可以使用以下内容对列进行详细命名:

['X': [ output.iloc[:, i:i+1]],'Y': [ [ output.iloc[:, i+1:i+2]]

您也可以放置一个包含行数的索引。