我需要保持“每个团队每个帐户的每个股票”的立场。所以我认为熊猫groupby
可能会被使用。我也试图在dataframe的评论中说明我的问题。职位栏是我手工添加的。在
初始数据框
time account scrip buy_price sell_price qty team
0 06/07/17 09:36 A1 FUT1 50.0 NaN 2 team1
1 06/07/17 09:46 A2 FUT1 100.0 NaN 2 team1
2 06/07/17 09:56 A3 FUT1 10.0 NaN 2 team2
3 06/07/17 09:57 A3 FUT1 NaN 10.0 2 team2
4 06/07/17 09:58 A1 FUT1 NaN 50.0 1 team1
5 06/07/17 09:59 A3 FUT1 NaN 50.0 1 team2
我需要增加职位。position列是由我手动添加的,为了清楚地说明位置是如何计算的,我在注释中写了额外的注释。在
^{pr2}$上面的例子只针对1个scrip FUT1,就会有很多个scrip。我的最终结果是类似的。在
Team Account Scrip Position
team1 A1 FUT1 1
A2 FUT1 2
team2 A3 FUT1 -1
一旦位置计算成功,可以在以后处理最终结果。
我的方法是:在每一行中创建一个唯一的键,以便知道何时应该+或-定位。例如,A1_FUT1_team1
代表row1
A2_FUT1_team1
代表{
您的问题可以通过两个步骤轻松解决:
第一步:
这行代码创建了一个新的列
some_stuff
,我这样做的目的是在数据中引入gain and loss
的一些逻辑。在如果您不想要一个新的列并且您喜欢这个想法,只需将
^{pr2}$qty
列替换为如下所示:接下来,我使用这个新列创建您的
position column
,如下所示:生成此列:
奖金:
如果要删除多余的列
some_stuff
,只需使用:第二步:
在该步骤中,您可以使用以下行获取最终分组表:
最终输出:
我相信这能回答你的问题。在
文档:
pandas.DataFrame.apply
pandas.Groupby
pandas.DataFrame.cumsum
pandas.DataFrame.min
这就是你要找的吗?在
它给了我:
^{pr2}$这比您想要的多了几列,但是您可以将所要查找的列子集化。在
(默认情况下,groupby会将分组的列移动到多级索引中,但如果您不希望这样做,您可以在}作为参数)
.groupby()
中添加{相关问题 更多 >
编程相关推荐