首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算字符串事件对之间的数据收益

计算字符串事件对之间的数据收益
EN

Stack Overflow用户
提问于 2022-11-11 17:18:44
回答 2查看 27关注 0票数 0

我有过

代码语言:javascript
运行
复制
   event   b
0  buy     4
1  nan
2  sell    5
3  buy     3
4  nan
5  nan
6  nan
7  sell    9

在每个buy之后,我们有一个未知距离的sell。我需要数一数我有多少次的利润。

在这种情况下,第一笔交易赚1 (5-4),第二笔交易赚6 (9-3)。

我需要在这里生成两个结果total wins=2total lost=0

所以我不在乎利润/损失有多大,只关心多少输赢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-11 17:37:24

如果你放下所有的nans,转动表,然后将卖出的位置向上移动,使它们与购买一致,那么您将有行的买卖,然后可以进行比较。

代码语言:javascript
运行
复制
df = df.dropna()
df
    event   b
0   buy     4.0
2   sell    5.0
3   buy     3.0
7   sell    9.0

df_pivoted = df.pivot(columns='event',values='b')
df_pivoted
event  buy  sell
0      4.0   NaN
2      NaN   5.0
3      3.0   NaN
7      NaN   9.0

df_pivoted['sell'] = df_pivoted['sell'].shift(-1) # shift sell values up a row
df_pivoted
event  buy  sell
0      4.0   5.0
2      NaN   NaN
3      3.0   9.0
7      NaN   NaN

df_pivoted = df_pivoted.dropna()

df_pivoted['win?'] = df_pivoted['buy'].lt(df_pivoted['sell'])
df_pivoted
event  buy  sell   win?
0      4.0   5.0  True
3      3.0   9.0  True

total_wins = len(df_pivoted[df_pivoted['win?'] == True])
total_losses = len(df_pivoted[df_pivoted['win?'] == False])
票数 1
EN

Stack Overflow用户

发布于 2022-11-11 17:53:18

你可以试试这个。删除不需要的列&在b、..count、总正值和负值中减去相应的元素。

代码语言:javascript
运行
复制
filter = df["b"] != ""
df = df[filter]
df['diff']=df['b'] -df['b'].shift(1)
dfs= df.iloc[1::2] 


profit = len(dfs.loc[dfs['diff'] > 0])
loss =len(dfs.loc[dfs['diff'] <0])
print(f"total wins = {profit}")
print(f"total loss = {loss}")

输出

代码语言:javascript
运行
复制
total wins = 2
total loss = 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74406051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档