Поворот строк кадра данных

#python #python-3.x #pandas #dataframe

Вопрос:

я пытаюсь повернуть строки фрейма данных, где первые строки-это последняя строка, вторая-первая и так далее

Оригинал

A
0 1
1 2
2 3
3 4
4 5
5 6

Результат

A
0 6
1 1
2 2
3 3
4 4
5 5

Как я могу это сделать?

Ответ №1:

Использовать np.roll от numpy:

 import numpy as np  df['A'] = np.roll(df['A'], 1) print(df)  # Output:  A 0 6 1 1 2 2 3 3 4 4 5 5  

Комментарии:

1. Я не знал о рулоне, он сохраняет тот же индекс? Дополнительный 1 из-за кого-то -1 для всех, лол

2. @Селиус Стингер. Numpy не заботится об индексе, поэтому значения правильно выровнены по столбцу. Спасибо за 1.

3. Вы правы, проблема, с которой я столкнулся в своем ответе, из-за которой мне пришлось сбросить значение_index (), была iloc[] . Спасибо за ваш ответ!

4. np.roll лучше всего подходит для таких случаев. ДО 1 от меня

5. Может ли он использоваться с группой panda??

Ответ №2:

Я думаю, вам может понадобиться использовать np.arange() с. iloc[] Если вы хотите, чтобы индекс оставался неизменным, добавьте .reset_index() :

 df = pd.DataFrame({'A':[1,2,3,4,5,6]}) df.iloc[np.arange(-1, len(df)-1)].reset_index(drop=True)  

ВОЗВРАТ:

 A 0 6 1 1 2 2 3 3 4 4 5 5  

Ответ №3:

Если вы ищете решение только для панд, это должно сделать работу за вас-

 df = pd.concat([df.iloc[-1:], df.iloc[0:-1]]) df.reset_index(inplace=True, drop=True)  

Комментарии:

1. Я не тот, кто проголосовал против, но ваше решение не работает. Это дает другой результат, чем ожидалось.

2. Для меня это прекрасно сработало. Не могли бы вы, пожалуйста, подробнее рассказать о том, чего вы хотели, чего не получилось таким образом? Я добавил строку сброса индекса, возможно, вы хотели, чтобы индексы были сброшены. Работает ли это сейчас?

3. Конечно, я могу. В вашем решении df.iloc[1:] дает нам элементы от 2 до 6, а df.iloc[0:1] дает 1. При использовании pd.concat мы получаем ряд: 2, 3, 4, 5, 6, 1. В ожидаемом объеме производства мы имеем: 6, 1, 2, 3, 4, 5. Если вы хотите создать его с помощью своего метода, вам следует сделать: pd.concat([df.iloc[-1:], df.iloc[:-1]]).reset_index(drop=True)

4. Вы абсолютно правы, я неправильно понял вопрос. Спасибо, я исправил это. Вы получили представление о подходе и в любом случае сами его разработали 😀