将给定行移动到 DataFrame 的末尾

2024-01-06

我想从 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)

Thanks


我会直接分配给 df 之后,而不是 concatshift http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.shift.html#pandas.DataFrame.shifting,然后使用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

EDIT

要在末尾插入:

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

另一个更新

感谢@AsheKetchum 指出我之前的答案是不正确的,现在看到这个 3 年后我意识到你可以reindex原来的df:

如果我们将索引的副本作为list:

In[24]:
idx = df.index.tolist()
idx

Out[24]: [0, 1, 2, 3, 4]

那么我们就可以pop此列表中感兴趣的索引:

In[25]:
idx.pop(2)
idx

Out[25]: [0, 1, 3, 4]

现在我们可以reindex通过添加到此列表:

In[26]:
df.reindex([2] + idx)

Out[26]: 
   a
2  2
0  0
1  1
3  3
4  4

或附加:

In[27]:    
df.reindex(idx+[2])

Out[27]: 
   a
0  0
1  1
3  3
4  4
2  2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将给定行移动到 DataFrame 的末尾 的相关文章

随机推荐