Pandas вычитать столбцы не работают с .iloc - PullRequest
2 голосов
/ 23 апреля 2020

У меня есть dataframe

test = pd.DataFrame({'col1':[1,2,3], 'col2':['a','b','c']})

test
Out[79]: 
   col1 col2
0     1    a
1     2    b
2     3    c

Я пытаюсь вычислить "первое различие" col1, явно используя iloc, но результаты бессмысленны:

test.iloc[1:,0] - test.iloc[:-1,0]
Out[80]: 
0    NaN
1    0.0
2    NaN
Name: col1, dtype: float64

Я знаю, что могу использовать pandas.DataFrame.diff, но мне нужно понять механику iloc, которая приводит к сбою.

1 Ответ

1 голос
/ 23 апреля 2020

Проблема со значениями индекса, которые различаются между двумя объектами:

print (test.iloc[1:,0])
1    2
2    3
Name: col1, dtype: int64

print (test.iloc[:-1,0])

0    1
1    2
Name: col1, dtype: int64

Возможное решение - создать одинаковые значения индекса:

a = test.iloc[1:,0].reset_index(drop=True) - test.iloc[:-1,0])
print (a)
0    1
1    1
Name: col1, dtype: int64

Или, если длина всегда одна и та же, конвертировать значения в numpy массив:

a = test.iloc[1:,0] - test.iloc[:-1,0].values
print (a)

1    1
2    1
Name: col1, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...