我是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])
提前感谢您的帮助!
答案 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]]
您也可以放置一个包含行数的索引。