2017-08-01 88 views
2

我有tresholds和利潤DF:大熊貓蟒蛇提高利潤,線性優化

import numpy as np import pandas as pd 

dates = pd.date_range('20130101',periods=6) 
df = pd.DataFrame(np.random.randn(6,3),index=dates,columns=['Value1', 'Value2', 'Profit']) 
df['Profit'] = df['Profit']*100 


print(df.to_string()) 

total_profit = df['Profit'].loc[(df.Value1 > 0) & (df.Value2 >= 0)].sum() 

print(total_profit) 

是有熊貓的方式通過尋找最適合的margings過濾值1和值2的tresholds優化total_profit?

我的意思是我可以循環DF和增加/減少過濾器值,直到我找到最合適的價值......但我想有人已經這樣做......也許科學-py?

所以我基本上需要一個函數返回最適合值1和值2,所以我可以過濾我的DF和優化total_profit。假設是,價值1,價值2和利潤之間存在相關性。

感謝致以最良好的祝願, e。

+0

您可以給出一個示例輸入和您想要得到的輸出嗎?我不太清楚你想要達到什麼......你想要一個「Value1」和「Value2」的閾值,這樣當你通過這些閾值過濾你的數據時,「Profit」的總和是最大化的? – jdehesa

+0

@jdehesa所以上面的例子基本上是輸入和輸出。 df是我的輸入數據框,它有n個值和利潤列。這裏的問題是,這是我的例子中的隨機數據。我的真實數據在兩個價值和利潤之間有關聯。所以我正在尋找一種方法來找到最適合我的Value1和Value2過濾以最大化total_profit ......如你所說。謝謝!! – Ele

+0

考慮到你的利潤*和利潤*完全是隨機的,我不認爲有一個更簡單/更智能/更快的方式,因爲這不是一個平滑的數學函數。如果你的例子在這個意義上是不正確的,而你的真實數據確實與這兩個邊界有關係,我們必須知道這種關係。 – Evert

回答

1

假設您只想使用df.Value1和df.Value2的觀察值,以下內容將起作用。

import numpy as np 
import pandas as pd 

dates = pd.date_range('20130101',periods=6) 
df = pd.DataFrame(np.random.randn(6,3),index=dates,columns=['Value1', 'Value2', 'Profit']) 
df['Profit'] = df['Profit']*100 

print(df.to_string()) 

# create list of all possible value pairs 
vals = [[i,j] for i in df.Value1 for j in df.Value2] 

# create list of profits from all possible value pairs 
total_profit = [df['Profit'].loc[(df.Value1 > i) & (df.Value2 >= j)].sum() for i, j in vals] 

# get index of maximum profit 
max_index = total_profit.index(max(total_profit)) 

# get values that correspond to max profit 
vals[max_index] 

Out[9]: [-0.51914224014959032, -0.73918945103973344] 
+0

這看起來很銳利:)謝謝! – Ele