为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas - 如何根据其他列减去行值?

Pandas - 如何根据其他列减去行值?

慕的地10843 2023-08-08 17:03:34
输入:  Symbol  Type  Value0   AAPL   BUY    4001   AAPL  SELL    3102   INFY  SELL    1903    JSL   BUY    1204    JSW   BUY    1905    JSW  SELL    1706    REL   BUY    1107    TCS   BUY    2108    TCS  SELL    200期望的输出: Symbol  Type  Value0   AAPL   BUY     902   INFY  SELL    1903    JSL   BUY    1204    JSW   BUY     206    REL   BUY    1107    TCS   BUY     10如何在 pandas 中实现此输出?我尝试了 groupby 但这适用于 Value 列。我想根据值的符号+类型减去行。就像 (交易品种+买入->价值) 减去 (交易品种+卖出->价值)
查看完整描述

3 回答

?
慕姐4208626

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


查看完整回答
反对 回复 2023-08-08
?
波斯汪

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


查看完整回答
反对 回复 2023-08-08
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我不知道这是否是最好的解决方案,但它绝对应该有效:

您可以使用 Numpy 将 pandas 矩阵转换为数组,通过它您可以循环、搜索值等。对于您的示例,具有 Buy 类型的列和 Sell 类型的下一行减去(我希望我'我在这里解决您的问题,对于任何误解表示抱歉),您可以简单地使用 for 循环来创建两个数组,一个为 Sell 类型,一个为 Buy 类型,然后从第一个数组中减去 Value 1 和 Value 1 从第二个或类似的东西。它绝对不如这个问题的其他答案,至少在这种情况下不是那么好,但我确实相信在某些情况下这可能会好得多,例如因为 numpy 可以让你重塑数组


查看完整回答
反对 回复 2023-08-08
  • 3 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信