簡體   English   中英

使用groupby之后將數據幀中的numpy數組傳遞到一個函數,該函數返回numpy數組,然后追加回數據幀

[英]Passing numpy arrays from dataframe after using groupby into a function that returns numpy arrays before appending back to dataframe

如果我有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
--------------------------------------------------

您應該能夠通過簡單的切片來做到這一點。

首先創建要使用的數據框

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM