我正在尝试将数据帧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()
答案 0 :(得分:3)
您只需致电reindex
并传递新的所需订单:
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.roll
注意这会返回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
答案 1 :(得分:1)
除非我遗漏了某些内容,否则最简单的解决方案就是首先将新行添加到开头:
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
。 (对1,000x3数据进行一些快速测试表明它比append
快3到4倍。)