Передача numy массивов из dataframe после использования groupby в функцию, которая возвращает numpy массивы перед добавлением обратно в dataframe - PullRequest
0 голосов
/ 27 ноября 2018

Если у меня есть фрейм данных с 2 группами,

--------------------------------------------------
| Date   | Code  | Input  |
--------------------------------------------------
| 1/1/18 | A     | 10     |
--------------------------------------------------
| 1/1/18 | B     | 100    |
--------------------------------------------------
| 1/2/18 | A     | 11     |
--------------------------------------------------
| 1/2/18 | B     | 101    |
--------------------------------------------------

Сначала я применяю groupby к коду, чтобы получить следующее:

--------------------------------------------------
| Date   | Code  | Input  |
--------------------------------------------------
| 1/1/18 | A     | 10     |
--------------------------------------------------
| 1/2/18 | A     | 11     |
--------------------------------------------------
| 1/1/18 | B     | 100    |
--------------------------------------------------
| 1/2/18 | B     | 101    |
--------------------------------------------------

Затем я пропускаю входы в соответствии скод и дата для функции, которая только принимает и возвращает массив NumPy

def func([10, 11]):
    returns [20, 25]

def func([100, 101]):
    returns [97, 95]

Как я могу присоединить массив NUMPY к соответствующей дате и коду в исходном порядке, чтобы получить намеченный кадр данных ниже:

--------------------------------------------------
| Date   | Code  | Input  | Output
--------------------------------------------------
| 1/1/18 | A     | 10     | 20
--------------------------------------------------
| 1/1/18 | B     | 100    | 97
--------------------------------------------------
| 1/2/18 | B     | 11     | 25
--------------------------------------------------
| 1/2/18 | B     | 101    | 95
--------------------------------------------------

1 Ответ

0 голосов
/ 27 ноября 2018

Вы должны быть в состоянии сделать это с помощью простой нарезки.

Сначала создайте кадры данных для работы с

cols = ['Code', 'Input]
index = pd.date_range('20180101', '20180105', freq='1D')

df1 = pd.DataFrame(data=np.random.randint(0, 10, (5, 2)), index=index, columns=cols)
df2 = pd.DataFrame(data=np.random.randint(0, 10, (5, 2)), index=index, columns=cols)

df3 = pd.concat([df1, df2], axis=0)

Определите строки, которые вы хотите передать в свою функцию.Примечание. Это только пример, его можно изменить для работы со столбцом вместо индекса.

idx = df3.index==df3.index[0]

>>> df3.loc[idx, :]
Out[21]: 
               Code  Input
    2018-01-01    A      1
    2018-01-01    B      0

Затем вы можете получить данные из этого фрагмента и передать их в вашу функцию.

>>> df3.loc[idx, 'Input'].values
Out[21]: 

       array([1, 0])  # see, it's an array.

Вы можете добавить строку в df3, передав выходные данные своей функции через

df3.loc[idx, 'Output'] = yourFunction(df3.loc[idx, 'Input'].values)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...