我有过
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=2
和total lost=0
所以我不在乎利润/损失有多大,只关心多少输赢
发布于 2022-11-11 17:37:24
如果你放下所有的nans,转动表,然后将卖出的位置向上移动,使它们与购买一致,那么您将有行的买卖,然后可以进行比较。
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])
发布于 2022-11-11 17:53:18
你可以试试这个。删除不需要的列&在b
、..count、总正值和负值中减去相应的元素。
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}")
输出
total wins = 2
total loss = 0
https://stackoverflow.com/questions/74406051
复制相似问题