Отдельные 2 массива в кадре данных - PullRequest
0 голосов
/ 31 января 2020

Мои данные df (форма 921 x 1) выглядит следующим образом:

0   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [52.91299603174603, 2.780002186077006, 2.428444682099035, 1.9729659176640224, 1.5245086521901212])
1   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [57.50430555555556, 4.605307698264335, 2.7257004204330895, 1.111884516011248, 2.0447376735106446])
2   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [52.05765873015873, 1.990137471526215, 1.823401414136555, 1.6393595029653947, 1.4975752877718798])
3   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [53.68928571428572, 0.5887958646369542, 2.4033544090769765, 1.2524139261039222, 1.6913320792004485])
4   ([0.0, 1.000198452073824, 2.000396904147648, 3.0005953562214724, 4.000793808295296], [52.049007936507934, 1.1250301372221871, 1.2300821162657336, 1.2122777908972708, 1.0745457469170827])
... 

При проверке данных отдельных строк выводится следующее:

Код:

test = df.iloc[920,0]
test

Вывод:

(array([0.        , 1.00019845, 2.0003969 , 3.00059536, 4.00079381]),
 array([59.32333333,  4.57267936,  1.4308551 ,  2.68190521,  1.87502486]))

Мой вопрос заключается в том, как разделить 2 массива в каждой строке в df. Как я хочу применить дополнительные функции ко второму массиву. Спасибо


Обновление:

Вот как это выглядит после применения Option1: enter image description here

Я не уверен, что пошло неправильно. Кажется, он не разделил 2 массива, а оставшиеся строки показали NaN.

1 Ответ

0 голосов
/ 31 января 2020

Опция 1

Есть pandas.DataFrame.explode, но это создаст новые строки при разбиении коллекции вместо столбца.

В вашем случае, когда вам нужны новые столбцы, вы можете явно создать еще один столбец для этого анализа из второго элемента строки.

In [1]: import pandas as pd                                                                                                                                                                                        

In [2]: df = pd.DataFrame({'test': (([1,2,3], [4,5,6]),)})                                                                                                                                                         

In [3]: df                                                                                                                                                                                                         
Out[3]: 
                     test
0  ([1, 2, 3], [4, 5, 6])


In [4]: df['test_2'] = df.test.apply(lambda x: x[1])                                                                                                                                                               

In [5]: df                                                                                                                                                                                                         
Out[5]: 
                     test     test_2
0  ([1, 2, 3], [4, 5, 6])  [4, 5, 6]

Если вы хотите извлечь первый столбец Вы также можете добавить

df['test_1'] = df.test.apply(lambda x: x[0]) 

Наконец, чтобы иметь только разделенный столбец.

In [7]: df.drop('test', axis=1)                                                                                                                                                                                   
Out[7]: 
      test_2     test_1
0  [4, 5, 6]  [1, 2, 3]

С этим легко применить дальнейшую функцию.

df.test_2.apply(some_function)

Вариант 2

Или вам не нужно разбивать его в первую очередь! Вот что вы можете сделать:

def some_function(row):
    data_to_transform = row[1] # use second column in row
    ...
    return transformed_data

df['transformed_data'] = df.test.apply(some_function)

Надеюсь, это поможет

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