3 回答
![?](http://img1.sycdn.imooc.com/54586453000163bd02200220-100-100.jpg)
TA贡献1852条经验 获得超7个赞
让我们尝试一下
df.Value *= np.where(df.Type=='BUY', 1, -1)
out = df.groupby('Symbol', as_index=False).agg({'Type':'first','Value':'sum'})
out
Out[152]:
Symbol Type Value
0 AAPL BUY 90
1 INFY SELL -190
2 JSL BUY 120
3 JSW BUY 20
4 REL BUY 110
5 TCS BUY 10
如果需要将销售转换为 pos
out.Value *= np.where(out.Type=='BUY', 1, -1)
out
Out[157]:
Symbol Type Value
0 AAPL BUY 90
1 INFY SELL 190
2 JSL BUY 120
3 JSW BUY 20
4 REL BUY 110
5 TCS BUY 10
![?](http://img1.sycdn.imooc.com/533e51f30001edf702000200-100-100.jpg)
TA贡献1811条经验 获得超4个赞
df2 = df.pivot_table(index='Symbol', columns='Type', values='Value', aggfunc='sum').\
fillna(0).eval('Value = BUY - SELL').drop(columns=['BUY', 'SELL']).reset_index()
df2.insert(1,'Type', np.where(df2['Value'] > 0, "BUY", "SELL"))
df2['Value'] = abs(df2['Value'])
Type Symbol Type Value
0 AAPL BUY 90.0
1 INFY SELL 190.0
2 JSL BUY 120.0
3 JSW BUY 20.0
4 REL BUY 110.0
5 TCS BUY 10.0
![?](http://img1.sycdn.imooc.com/5458655200013d9802200220-100-100.jpg)
TA贡献1784条经验 获得超7个赞
我不知道这是否是最好的解决方案,但它绝对应该有效:
您可以使用 Numpy 将 pandas 矩阵转换为数组,通过它您可以循环、搜索值等。对于您的示例,具有 Buy 类型的列和 Sell 类型的下一行减去(我希望我'我在这里解决您的问题,对于任何误解表示抱歉),您可以简单地使用 for 循环来创建两个数组,一个为 Sell 类型,一个为 Buy 类型,然后从第一个数组中减去 Value 1 和 Value 1 从第二个或类似的东西。它绝对不如这个问题的其他答案,至少在这种情况下不是那么好,但我确实相信在某些情况下这可能会好得多,例如因为 numpy 可以让你重塑数组
添加回答
举报