2017-05-31 71 views
1

我是熊猫新手,我有一个csv文件,我想要将每行2 & 3移至value1和value2列。有人可以帮我吗?我似乎无法弄清楚。熊猫Python移动行

data, value1, value2 

1.00   
2.00   
3.00   
4.00   
5.00   
6.00   
7.00   
8.00   
9.00  

输出会变成这个

one, value1, value2 

1.00 2.00 3.00   
4.00 5.00 6.00   
7.00 8.00 9.00  

回答

1

更通用的解决方案是创建MultiIndex.from_arrays与模和地板numpy.arange师与unstack

print (df) 
    data 
0 1.0 
1 2.0 
2 3.0 
3 4.0 
4 5.0 
5 6.0 
6 7.0 
7 8.0 
8 9.0 
9 10.0 

a = np.arange(len(df.index)) 
print (a) 
[0 1 2 3 4 5 6 7 8 9] 

df.index = pd.MultiIndex.from_arrays([a % 3, a // 3]) 
print (df) 
    data 
0 0 1.0 
1 0 2.0 
2 0 3.0 
0 1 4.0 
1 1 5.0 
2 1 6.0 
0 2 7.0 
1 2 8.0 
2 2 9.0 
0 3 10.0 

df1 = df['data'].unstack(0) 
df1.columns=['data','value1','value2'] 
print (df1) 
    data value1 value2 
0 1.0  2.0  3.0 
1 4.0  5.0  6.0 
2 7.0  8.0  9.0 
3 10.0  NaN  NaN 
+0

这是一个很酷的解决方案。 +1 –

+0

哇。这很棒!非常感谢!我有太多的阅读要做。 –

+0

很高兴能提供帮助。如果我的回答很有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067)它。谢谢。 – jezrael

1

您可以使用一个numpy的方法reshape再转换回来pd.DataFrame到数据帧,并命名列。

pd.DataFrame(df.values.reshape(3,3), columns=['data','value1','value2']) 

输出:

data value1 value2 
0  1  2  3 
1  4  5  6 
2  7  8  9 
+0

获得值误差: ValueError Traceback(最近调用最后一次) in () ----> 1 na = pd.DataFrame(df.values.reshape(3,3),columns = [ 'data1','value1','value2']) ValueError:新阵列的总大小必须保持不变 –

+0

此解决方案仅限于9个值。 jezrael的解决方案更强大。 –