我有一个看起来像这样的df:
a b
apple | 7 | 2 |
google | 8 | 8 |
swatch | 6 | 6 |
merc | 7 | 8 |
other | 8 | 9 |
我想选择一个给定的行,按名称说,说“ apple”,然后将其移到新位置,说-1(第二行)
所需的输出
a b
google | 8 | 8 |
swatch | 6 | 6 |
merc | 7 | 8 |
apple | 7 | 2 |
other | 8 | 9 |
有没有可用的功能来实现这一目标?
答案 0 :(得分:3)
使用Index.difference
删除值,使用numpy.insert
添加值到新索引,最后使用DataFrame.reindex
或DataFrame.loc
更改行的顺序:
a = 'apple'
idx = np.insert(df.index.difference([a], sort=False), -1, a)
print (idx)
Index(['google', 'swatch', 'merc', 'apple', 'other'], dtype='object')
df = df.reindex(idx)
#alternative
#df = df.loc[idx]
print (df)
a b
google 8 8
swatch 6 6
merc 7 8
apple 7 2
other 8 9
答案 1 :(得分:2)
这看起来不错,我正在使用pd.Index.insert()
和pd.Index.drop_duplicates()
:
df.reindex(df.index.insert(-1,'apple').drop_duplicates(keep='last'))
a b
google 8 8
swatch 6 6
merc 7 8
apple 7 2
other 8 9
答案 2 :(得分:1)
我不知道任何内置函数,但是一种方法是只操作索引,然后使用新索引对DataFrame重新排序(假定所有索引值都是唯一的):
name = 'apple'
position = -1
new_index = [i for i in df.index if i != name]
new_index.insert(position, name)
df = df.loc[new_index]
结果:
a b
google 8 8
swatch 6 6
merc 7 8
apple 7 2
other 8 9