Boo*_*d16 3 python concat dataframe pandas
我想从DataFrame中获取一个给定的行,并在前面或附加到同一个DataFrame.
我的代码就是这样,但我不确定我是以正确的方式做到这一点,还是有更简单,更好,更快的方式?
testdf = df.copy()
#get row
target_row = testdf.ix[[2],:]
#del row from df
testdf.drop([testdf.index[2]], axis=0, inplace=True)
#concat original row to end or start of df
newdf = pd.concat([testdf, target_row], axis=0)
Run Code Online (Sandbox Code Playgroud)
谢谢
而不是concat我会直接分配到df之后shift
,然后iloc
用来引用你想要分配行的位置,你必须调用,squeeze
这样你只需要分配值并丢失原始索引值,否则它会引发一个ValueError
:
In [210]:
df = pd.DataFrame({'a':np.arange(5)})
df
Out[210]:
a
0 0
1 1
2 2
3 3
4 4
In [206]:
target_row = df.ix[[2],:]
target_row
Out[206]:
a
2 2
In [211]:
df = df.shift()
df.iloc[0] = target_row.squeeze()
df
Out[211]:
a
0 2
1 0
2 1
3 2
4 3
Run Code Online (Sandbox Code Playgroud)
编辑
要插入到最后:
In [255]:
df = pd.DataFrame({'a':np.arange(5)})
target_row = df.ix[[2],:]
df = df.shift(-1)
df.iloc[-1] = target_row.squeeze()
df
Out[255]:
a
0 1
1 2
2 3
3 4
4 2
Run Code Online (Sandbox Code Playgroud)
另一个更新
感谢@AsheKetchum指出我之前的答案是错误的,现在看看这3年后,我意识到你可能只是reindex
原来的:
如果我们将索引的副本作为list
:
In[24]:
idx = df.index.tolist()
idx
Out[24]: [0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
那么我们可以pop
从这个列表中感兴趣的索引:
In[25]:
idx.pop(2)
idx
Out[25]: [0, 1, 3, 4]
Run Code Online (Sandbox Code Playgroud)
现在我们可以reindex
通过预先列出这个列表:
In[26]:
df.reindex([2] + idx)
Out[26]:
a
2 2
0 0
1 1
3 3
4 4
Run Code Online (Sandbox Code Playgroud)
或附加:
In[27]:
df.reindex(idx+[2])
Out[27]:
a
0 0
1 1
3 3
4 4
2 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4340 次 |
最近记录: |