[英]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.