Выполнение вычислений на массиве numpy и добавление их в кадр данных pandas - PullRequest
1 голос
/ 01 апреля 2019

Допустим, у меня есть такой массив:

a = np.array([[1, 2, 3, 4, 5, 6, 7], [20, 25, 30, 35, 40, 45, 50], [2, 4, 6, 8, 10, 12, 14]])

и кадр данных, такой как этот:

  num letter
0   1      a
1   2      b
2   3      c

Затем я хотел бы рассчитать разницу между первым и последним числом в каждой последовательности в массиве и в конечном итоге добавить эту разницу в новый столбец в df.

В настоящее время я могу рассчитать желаемую разницу в каждой последовательности следующим образом:

for i in a:
    print(i[-1] - i[0])

Дает мне следующие результаты:

6
30
12

Я ожидаю, что смогу сделать это, заменив print на df['new_col'], например, так:

df['new_col'] = (i[-1] - i[0])

И чтобы мой df выглядел так:

  num letter new_col
0   1      a      6
1   2      b      30
2   3      c      12

Тем не менее, я получаю это:

  num letter  new_col
0   1      a       12
1   2      b       12
2   3      c       12

Я также был бы очень признателен, если бы кто-нибудь мог сказать мне, что эквивалентно .diff() и .shift(), но я попытался сделать то же самое, что и с пандами данных pandas, но только что получили сообщения об ошибках. Это было бы полезно для меня, если я хочу вычислить разницу не только между первым и последним числами, но где-то между ними.

Любая помощь будет очень признательна, ура.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

в настоящее время вы выполняете вычисление разности только в самом последнем

используйте понимание списка:

a = np.array([[1, 2, 3, 4, 5, 6, 7], [20, 25, 30, 35, 40, 45, 50], [2, 4, 6, 8, 10, 12, 14]])

b = [i[-1] - i[0] for i in a]

если несоответствия длин, то вам необходимо расширить список с помощью NaN:

b = b + [np.NaN]*(len(df) - len(b))
df['new_col'] = b
1 голос
/ 01 апреля 2019

Может быть лучше сделать это в DataFrame, если ваш массив увеличится в размере.

df1 = pd.DataFrame(a.T)

df['new_col'] = df1.iloc[-1] - df1.iloc[0]

print(df)

   num letter  new_col
0    1      a        6
1    2      b       30
2    3      c       12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...