2017-12-27 1186 views
1

我前幾天正在處理這個問題,但是我找不到答案。希望您能夠幫助我。從一個數據框中創建一個以一列值爲參考的數組

這是我的數據框:

Date    Attribute  Quantity 
0 2017-12-14   large   -39 
0 2017-12-15   large   -80 
1 2017-12-15   large   -30 
2 2017-12-14   short   -15 
2 2017-12-15   short   -100 
4 2017-12-15   short   -10 
1 2017-12-15   short   20 
3 2017-12-15   short   60 
3 2017-12-15   big   80 
5 2017-12-15   big   104 

我要做些什麼?我想爲每個Attribute系統計算XIRR。爲此,我需要DateQuantity(作爲數組),但是基於第二列中列出的每個Attribute項目。例如,給出large,我想爲large提取Datesquantities(作爲數組)。

鑑於此,我認爲我的最佳選擇是基於Attibute列創建特定數組,然後執行上述功能(請告訴我,如果考慮另一種解決此問題的方法)。於是,我產生一個陣列df1= df[['Date','Quantity']].as_matrix()其產生

[[Timestamp('2017-12-14 00:00:00') -39] 
[Timestamp('2017-12-15 00:00:00') -80] 
[Timestamp('2017-12-15 00:00:00') -30] 
[Timestamp('2017-12-14 00:00:00') -15] 
[Timestamp('2017-12-15 00:00:00') -100] 
[Timestamp('2017-12-15 00:00:00') -10] 
[Timestamp('2017-12-15 00:00:00') -20] 
[Timestamp('2017-12-15 00:00:00') 60] 
[Timestamp('2017-12-15 00:00:00') -80] 
[Timestamp('2017-12-15 00:00:00') 104]] 

正如你可以看到這個陣列包括所有的屬性,但我想根據Attribute列各attibute要達到這樣的For/each功能。我怎樣才能做到這一點? 這是我最終目標的最佳方法嗎?

任何幫助將不勝感激。

PD:我應該提一下,我想使用屬性作爲一個組的作品(因爲它需要日期和數量,所有的一起)。它的工作原理類似於gruopby

感謝

+1

您可以將功能行作爲系列。 'df.apply(some_function,axis = 1)' –

+0

不,我認爲這不是一個好主意。我不同意發佈的答案,'apply'是你應該看的最後一個解決方案。請告訴我你想做什麼。你很可能需要一個groupby +的東西(我不知道是什麼,因爲你沒有告訴我你想做什麼......現在你知道爲什麼解釋你的問題是重要的)。 –

回答

1

考慮將函數應用於數據幀中的每一行:

def row_func(row): 
    if row['Atribute'] == 'large': 
     return row['quantity'] 
    etc... 

df['new_column'] = df.apply(row_func, axis=1) 
相關問題