2017-04-25 158 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