Переместить строку по имени в нужное место в df - PullRequest
2 голосов
/ 09 июля 2019

У меня есть df, который выглядит следующим образом:

         a   b
apple  | 7 | 2 |
google | 8 | 8 |
swatch | 6 | 6 |
merc   | 7 | 8 |
other  | 8 | 9 |

Я хочу выбрать определенную строку, скажем, по имени, сказать «яблоко» и переместить ее в новое место, скажем, -1 (второй последнийстрока)

желаемый вывод

         a   b
google | 8 | 8 |
swatch | 6 | 6 |
merc   | 7 | 8 |
apple  | 7 | 2 |
other  | 8 | 9 |

Есть ли какие-либо функции для этого?

Ответы [ 3 ]

3 голосов
/ 09 июля 2019

Используйте 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
2 голосов
/ 09 июля 2019

Это кажется хорошим, я использую 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
1 голос
/ 09 июля 2019

Я не знаю ни о какой встроенной функции, но один из подходов состоит в том, чтобы манипулировать только индексом, а затем использовать новый индекс для переупорядочения 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
...