【发布时间】:2020-10-16 11:36:03
【问题描述】:
这是我的问题:
假设您必须在以下条件下买卖两个对象:
- 如果对象 A 或 B 的价格低于 150 (如果第二天对象仍然低于 150,那么您只需保留该对象,什么都不做
- 如果对象高于或等于 150,则您卖出该对象并获利
你以 10000 美元开始游戏
这是包含所有价格的 DataFrame
df=pd.DataFrame({'Date':['2017-05-19','2017-05-22','2017-05-23','2017-05-24','2017-05-25','2017-05-26','2017-05-29'],
'A':[153,147,149,155,145,147,155],
'B':[139,152,141,141,141,152,152],})
df['Date']=pd.to_datetime(df['Date'])
df = df.set_index('Date')
目标是返回一个 DataFrame,其中包含您持有的 A 和 B 的对象数量以及您剩余的现金数量。 如果满足条件,每个物品的分配是您没有任何物品的现金的一半(重量=1/2),如果您已经有一个物品(重量=1),则为剩余的现金
我们先看df,我还将开发我正在尝试创建的新数据框(我们称之为df_end):
在 2017 年 5 月 19 日,对象 A 为 153 美元,B 为 139 美元:您购买了 35.97 个对象 B (=5000/139),因为价格为 您还剩 5000 美元现金。
在 2017 年 5 月 22 日,对象 A 为 147 美元,B 为 152 美元:您以 =150 --> 由于出售 B,您现在有 5467,44$ 现金。
在 2017 年 5 月 23 日,对象 A 为 149 美元,B 为 141 美元:您保持在对象 A(34.01 对象)上的头寸,因为它仍低于 150,您买入 38.77 对象 B(=5467.44/141)作为价格是 你现在还有 0 美元现金。
在 2017 年 5 月 24 日,对象 A 为 155 美元,B 为 141 美元:您以 155 美元的价格卖出 34.01 个对象 A,因为它高于 150 美元,您保留 38.77 个对象 B,因为它仍然低于 150 —> 您现在有由于出售 A,剩下 5271.55 美元的现金
在 2017 年 5 月 25 日,对象 A 为 145 美元,B 为 141 美元:您购买 36.35 个对象 A (5271.55/145),因为它低于 150,您保留 38.77 个对象 B,因为它仍然低于 150 —> 你有现在0美元现金
在 2017 年 5 月 26 日,对象 A 为 147 美元,B 为 152 美元:您以 152 的价格卖出 38.77 个对象 B,因为它高于 150,您保留 36.35 个对象 A,因为它仍然低于 150 —> 您现在有 5893.04 美元由于出售对象 B 以现金支付
在 2017 年 5 月 29 日,对象 A 为 155 美元,B 为 152 美元:您以 155 的价格卖出 36.35 个对象 A,因为它高于 150,而您什么也不做,因为 B 不低于 150 —> 您现在有 11.527,出售对象 A 获得 29 美元现金。
因此,新的数据框 df_end 应该如下所示(这是我要寻找的结果)
A B Cash
Date
2017-05-19 0 35.97 5000
2017-05-22 34.01 0 5467.64
2017-05-23 34.01 38.77 0
2017-05-24 0 38.77 5272.11
2017-05-25 36.35 38.77 0
2017-05-26 36.35 0 5893.04
2017-05-29 0 0 11527.29
我的主要问题是我们必须遍历行和列,这是最困难的部分。 一个星期以来我一直在努力寻找解决方案,但我仍然没有找到任何想法,这就是为什么我试图尽可能清楚地解释。
因此,如果有人对此问题有任何想法,非常欢迎您。 非常感谢
【问题讨论】:
标签: python pandas loops dataframe if-statement