2017-05-31 87 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的解決方案更強大。 –