按名称将行移动到df中的所需位置

时间:2019-07-09 11:29:45

标签: pandas indexing df

我有一个看起来像这样的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 |

有没有可用的功能来实现这一目标?

3 个答案:

答案 0 :(得分:3)

使用Index.difference删除值,使用numpy.insert添加值到新索引,最后使用DataFrame.reindexDataFrame.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