-
慕姐4208626
让我们尝试一下df.Value *= np.where(df.Type=='BUY', 1, -1)out = df.groupby('Symbol', as_index=False).agg({'Type':'first','Value':'sum'})outOut[152]: Symbol Type Value0 AAPL BUY 901 INFY SELL -1902 JSL BUY 1203 JSW BUY 204 REL BUY 1105 TCS BUY 10如果需要将销售转换为 posout.Value *= np.where(out.Type=='BUY', 1, -1)outOut[157]: Symbol Type Value0 AAPL BUY 901 INFY SELL 1902 JSL BUY 1203 JSW BUY 204 REL BUY 1105 TCS BUY 10
-
波斯汪
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 Value0 AAPL BUY 90.01 INFY SELL 190.02 JSL BUY 120.03 JSW BUY 20.04 REL BUY 110.05 TCS BUY 10.0
-
噜噜哒
我不知道这是否是最好的解决方案,但它绝对应该有效:您可以使用 Numpy 将 pandas 矩阵转换为数组,通过它您可以循环、搜索值等。对于您的示例,具有 Buy 类型的列和 Sell 类型的下一行减去(我希望我'我在这里解决您的问题,对于任何误解表示抱歉),您可以简单地使用 for 循环来创建两个数组,一个为 Sell 类型,一个为 Buy 类型,然后从第一个数组中减去 Value 1 和 Value 1 从第二个或类似的东西。它绝对不如这个问题的其他答案,至少在这种情况下不是那么好,但我确实相信在某些情况下这可能会好得多,例如因为 numpy 可以让你重塑数组