2017-04-25 120 views
3

一定行索引我有這樣一個數據幀:如何重新排列大熊貓

   100MHz_Dif0 102MHz_Dif0 100MHz_Dif1 102MHz_Dif1 
Frequency              
9.000000e+07 -70.209000 -65.174004 -66.063004 -66.490997 
9.003333e+07 -70.628998 -65.196999 -66.339996 -66.461998 
9.006667e+07 -70.405998 -65.761002 -65.432999 -65.549004 
9.010000e+07 -70.524002 -65.552002 -66.038002 -65.887001 
9.013333e+07 -70.746002 -65.658997 -65.086998 -65.390999 
9.016667e+07 -70.884003 -66.209999 -64.887001 -65.397003 
9.020000e+07 -70.752998 -66.019997 -65.308998 -66.571999 
9.023333e+07 -70.447998 -65.858002 -65.500000 -65.028999 
9.026667e+07 -70.452003 -65.832001 -66.032997 -65.005997 
9.030000e+07 -71.219002 -65.739998 -65.961998 -65.986000 
9.033333e+07 -71.095001 -65.820999 -67.112999 -65.977997 
9.036667e+07 -70.834000 -65.926003 -66.348000 -65.568001 

作爲一個例子。如果我想將第三行和第四行移動到第一行和第二行,我應該使用哪個命令?而且我會根據頻率改變行的順序,那麼我能做些什麼來實現它?非常感謝你。

+0

可能重複:HTTPS ://stackoverflow.com/questions/13148429/how-to-change-the-order-of-dataframe-columns/39237712 –

+0

做你是指列或行?你能提供你的預期輸出的樣子嗎?目前,我很困惑。我提供了一種移動行的方法。但是,我很不清楚你的意思是按頻率排序。你在你的頻率索引(已經排序)和頻率在你的列標題。 – piRSquared

+0

對不起,我想要的是像9.003333e + 07這行從第二行移動到第一行並保持其他行相同。這只是一個例子,我可以對頻率進行排序,並將我想要的頻率移動到頂端行。 – Dogod

回答

2

對於指標值的變化順序由frequency使用sort_index

df = df.sort_index() 
print (df) 
      100MHz_Dif0 102MHz_Dif0 100MHz_Dif1 102MHz_Dif1 
Frequency              
90000000.0 -70.209000 -65.174004 -66.063004 -66.490997 
90033330.0 -70.628998 -65.196999 -66.339996 -66.461998 
90066670.0 -70.405998 -65.761002 -65.432999 -65.549004 
90100000.0 -70.524002 -65.552002 -66.038002 -65.887001 
90133330.0 -70.746002 -65.658997 -65.086998 -65.390999 
90166670.0 -70.884003 -66.209999 -64.887001 -65.397003 
90200000.0 -70.752998 -66.019997 -65.308998 -66.571999 
90233330.0 -70.447998 -65.858002 -65.500000 -65.028999 
90266670.0 -70.452003 -65.832001 -66.032997 -65.005997 
90300000.0 -71.219002 -65.739998 -65.961998 -65.986000 
90333330.0 -71.095001 -65.820999 -67.112999 -65.977997 
90366670.0 -70.834000 -65.926003 -66.348000 -65.568001 

而對於排序列:

df = df.sort_index(axis=1) 
print (df) 
      100MHz_Dif0 100MHz_Dif1 102MHz_Dif0 102MHz_Dif1 
Frequency              
90000000.0 -70.209000 -66.063004 -65.174004 -66.490997 
90033330.0 -70.628998 -66.339996 -65.196999 -66.461998 
90066670.0 -70.405998 -65.432999 -65.761002 -65.549004 
90100000.0 -70.524002 -66.038002 -65.552002 -65.887001 
90133330.0 -70.746002 -65.086998 -65.658997 -65.390999 
90166670.0 -70.884003 -64.887001 -66.209999 -65.397003 
90200000.0 -70.752998 -65.308998 -66.019997 -66.571999 
90233330.0 -70.447998 -65.500000 -65.858002 -65.028999 
90266670.0 -70.452003 -66.032997 -65.832001 -65.005997 
90300000.0 -71.219002 -65.961998 -65.739998 -65.986000 
90333330.0 -71.095001 -67.112999 -65.820999 -65.977997 
90366670.0 -70.834000 -66.348000 -65.926003 -65.568001 

而對於各種各樣的都 - indexcolumns

df = df.sort_index(axis=1).sort_index() 
print (df) 
      100MHz_Dif0 100MHz_Dif1 102MHz_Dif0 102MHz_Dif1 
Frequency              
90000000.0 -70.209000 -66.063004 -65.174004 -66.490997 
90033330.0 -70.628998 -66.339996 -65.196999 -66.461998 
90066670.0 -70.405998 -65.432999 -65.761002 -65.549004 
90100000.0 -70.524002 -66.038002 -65.552002 -65.887001 
90133330.0 -70.746002 -65.086998 -65.658997 -65.390999 
90166670.0 -70.884003 -64.887001 -66.209999 -65.397003 
90200000.0 -70.752998 -65.308998 -66.019997 -66.571999 
90233330.0 -70.447998 -65.500000 -65.858002 -65.028999 
90266670.0 -70.452003 -66.032997 -65.832001 -65.005997 
90300000.0 -71.219002 -65.961998 -65.739998 -65.986000 
90333330.0 -71.095001 -67.112999 -65.820999 -65.977997 
90366670.0 -70.834000 -66.348000 -65.926003 -65.568001 
+0

我也打算髮表。但我只是困惑。爲什麼要將第3行和第4行移到第1和第2行進行排序? – piRSquared

+0

我不知道。所以寧可添加兩個解決方案 – jezrael

+1

也許會添加'df.sort_index(axis = 1).sort_index()'。涵蓋所有的基礎。 – piRSquared

0

這可能是不現實的,因爲你只有4列 假設數據幀做:

dataFrame = dataFrame[['100MHz_Dif1','102MHz_Dif1','100MHz_Dif0', '102MHz_Dif0']] 

這實際上是重寫數據幀,

3

假設你數據框被命名爲df
使用np.r_創建適當的切片

df.iloc[np.r_[[2, 3], [0, 1], 4:]] 

       100MHz_Dif0 102MHz_Dif0 100MHz_Dif1 102MHz_Dif1 
Frequency              
90066670.0 -70.405998 -65.761002 -65.432999 -65.549004 
90100000.0 -70.524002 -65.552002 -66.038002 -65.887001 
90000000.0 -70.209000 -65.174004 -66.063004 -66.490997 
90033330.0 -70.628998 -65.196999 -66.339996 -66.461998 
90000000.0 -70.209000 -65.174004 -66.063004 -66.490997 
90033330.0 -70.628998 -65.196999 -66.339996 -66.461998 
90066670.0 -70.405998 -65.761002 -65.432999 -65.549004 
90100000.0 -70.524002 -65.552002 -66.038002 -65.887001 
+0

謝謝你的幫助。但我不是什麼確切的行索引,而是我知道9010000.0或9003330.0這樣的頻率,有什麼需要做的嗎?非常感謝你。 – Dogod