Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧中行的移位顺序_Python_Pandas - Fatal编程技术网

Python 数据帧中行的移位顺序

Python 数据帧中行的移位顺序,python,pandas,Python,Pandas,我正在尝试将数据帧的最后两行df设置为数据帧的前两行,上一行在轮班后变为第三行。这是因为我刚刚添加了行[3,0.3232,0,0,2,0.500],[6,0.3232,0,0,2,0.500]。但是,当我希望它们成为前两行时,它们被添加到df的末尾,因此成为最后两行。我只是想知道怎么做 df = df.T df[0] = [3,0.3232, 0, 0, 2,0.500] df[1] = [6,0.3232, 0, 0, 2,0.500] df = df.T df = df.reset_inde

我正在尝试将数据帧的最后两行
df
设置为数据帧的前两行,上一行在轮班后变为第三行。这是因为我刚刚添加了行
[3,0.3232,0,0,2,0.500]
[6,0.3232,0,0,2,0.500]
。但是,当我希望它们成为前两行时,它们被添加到df的末尾,因此成为最后两行。我只是想知道怎么做

df = df.T
df[0] = [3,0.3232, 0, 0, 2,0.500]
df[1] = [6,0.3232, 0, 0, 2,0.500]
df = df.T
df = df.reset_index()
您只需呼叫并传递所需的新订单:

In [14]:

df = pd.DataFrame({'a':['a','b','c']})
df
Out[14]:
   a
0  a
1  b
2  c
In [16]:

df.reindex([1,2,0])
Out[16]:
   a
1  b
2  c
0  a
编辑

另一种方法是使用注意,它返回一个
np.array
,因此我们必须显式地从df中选择列以覆盖它们:

In [30]:    
df = pd.DataFrame({'a':['a','b','c'], 'b':np.arange(3)})
df

Out[30]:
   a  b
0  a  0
1  b  1
2  c  2

In [42]:    
df[df.columns] = np.roll(df, shift=-1, axis=0)
df

Out[42]:
   a  b
0  b  1
1  c  2
2  a  0
axis=0
参数似乎是必需的,否则列顺序将不保留:

In [44]:    
df[df.columns] = np.roll(df, shift=-1)
df

Out[44]:
   a  b
0  0  b
1  1  c
2  2  a

除非我遗漏了什么,否则最简单的解决方案就是首先将新行添加到开头:

existing_rows = pd.DataFrame( np.random.randn(4,3) )
new_rows      = pd.DataFrame( np.random.randn(2,3) )

new_rows.append( existing_rows )

          0         1         2
0  0.406690 -0.699925  0.449278
1  1.729282  0.387896  0.652381
0  0.091711  1.634247  0.749282
1  1.354132 -0.180248 -1.880638
2 -0.151871 -1.266152  0.333071
3  1.351072 -0.421404 -0.951583
如果您真的想切换行,可以按照EdChum的建议进行。另一种方式是这样的:

df.iloc[-2:].append( df.iloc[:-2] )

我认为这比EdChum建议的
np.roll
稍微简单一些,但是numpy通常更快,所以如果你关心速度的话,我会使用
np.roll
。(对1000x3数据进行一些快速测试表明,它比
append
快3到4倍)

谢谢。对于大型数据帧,有更好的方法吗?我问这个问题是因为我的数据框有59行,索引到处都是。你可以把它们切块,然后把它们浓缩,这取决于这个getsI可能不理解你的评论有多复杂,但是axis=0不是关于列顺序,而是做行移位vs列移位。@JohnE我有点惊讶,默认参数axis=None意味着它沿着两个轴滚动,这让我很惊讶哦,谢谢,我现在明白了。显然,当axis=None时,它会变平、移动,然后将其恢复到原始形状。