2017-08-01 65 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