Групповые категории и целочисленные переменные панд Python приводят к разнице между последним и хвостом панд - PullRequest
0 голосов
/ 05 июля 2018

UPDATE: Пожалуйста, загрузите мой полный набор данных здесь .

мой тип данных:

>>> df.dtypes
increment       int64
spread        float64
SYM_ROOT     category
dtype: object

Я понял, что проблема могла быть вызвана тем фактом, что мой SYM_ROOT является переменной категории. Чтобы повторить проблему, вы можете сначала сделать следующее:

df=pd.read_csv("sf.csv")
df['SYM_ROOT']=df['SYM_ROOT'].astype('category')

Но я все еще озадачен тем, почему мой SYM_ROOT приведет к заполнению пробелов в increment NA? Если для групповой категории и целочисленного значения по умолчанию не будет сбалансированной панели.


Я заметил, что поведение pd.groupby().last отличается от поведения pd.groupby().tail(1).

Например, предположим, у меня есть следующие данные:

enter image description here

increment - это целое число от 0 до 4680. Однако для некоторой переменной SYM_ROOT между ними есть пробелы. Например, 4 могут отсутствовать в нем.

Что я хочу сделать, так это сохранить последнее наблюдение для каждой группы.

Если я сделаю df.groupby(['SYM_ROOT','increment']).last(), кадр данных станет:

enter image description here

Если я сделаю df.groupby(['SYM_ROOT','increment']).tail(1), кадр данных станет:

enter image description here

Мне кажется, что оператор last() создаст сбалансированные данные временных рядов и заполнит пробелы NaN, а оператор tail(1) - нет. Это правильно?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Это на самом деле проблема здесь, в Github , где проблема в основном вызвана групповыми категориями, угадывающими значения.

0 голосов
/ 05 июля 2018

Обновление:

Ваши столбцы increment это category

df=pd.DataFrame({'A':[1,1,2,2],'B':[1,1,2,3],'C':[1,1,1,1]})
df.B=df.B.astype('category')
df.groupby(['A','B']).last()
Out[590]: 
       C
A B     
1 1  1.0
  2  NaN
  3  NaN
2 1  NaN
  2  1.0
  3  1.0

Когда вы используете tail, он не будет составлять уровень промаха, поскольку tail больше похож на базу данных, а не на отдельные столбцы

df.groupby(['A','B']).tail(1)
Out[593]: 
   A  B  C
1  1  1  1
2  2  2  1
3  2  3  1

После того, как передал его, используя astype

df.B=df.B.astype('int')
df.groupby(['A','B']).last()
Out[591]: 
     C
A B   
1 1  1
2 2  1
  3  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...