我有一个数据框,里面有一只股票的信息,如下所示:
|产品ID |初始库存|初始单位成本|参考|数量|单位成本|当前库存|
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
|a|5|22|采购|4 | 24 | 9 |
|a|5|22|采购|8 | 21 | 17 |
|a|5|22|销售|-4|25|13|
|a|5|22|采购|10 | 20 | 23 |
|a|5|22|销售|-15|22|8|
|b|14|3.5|销售|10|4|4|
|b|14|3.5|采购|20 | 3 | 24 |
|b|14|3.5|销售|5|4|19|
|b|14|3.5|采购|2 | 3.5 | 21 |
|c|27|1|采购|100 | 0.95 | 127 |
|c|27|1|采购|3 | 1.1 | 130 |
每一行代表特定产品的购买/销售。Quantity
表示以给定的Unit cost
购买/出售的单位数量。Current stock
是购买/出售后的剩余库存。对于每种产品,我想计算每次销售/购买后的加权平均成本(WAC)。程序如下:
- 对于每个乘积的第一行,
WAC = (Initial stock * Initial unit cost + Quantity * Unit cost) / Current stock
正好等于Reference == 'Purch.'
。如果不是,则为WAC = Initial unit cost
。 - 对于下一行,
WAC[i] = (Current stock[i-1] * WAC[i-1] + Quantity[i] * Unit cost[i]) / Current stock[i]
就像Reference[i] == 'Purch.'
一样。如果不是,则WAC[i] = WAC[i-1]
。
下表显示了我要查找的内容(WAC
列以及如何计算):
|产品ID |初始库存|初始单位成本|参考|数量|单位成本|当前库存|(如何)WAC | WAC|
| ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ |
|a|5|22|采购|4 | 24 | 9 | (522 + 424)/9 | 22.89 |
|a|5|22|采购|8 | 21 | 17 | (922.89 + 821)/17 | 22 |
|a |5|22|销售|-4|25|13|-|22|
|a|5|22|采购|10 | 20 | 23 | (1322 + 1020)/23 | 21.13 |
|a |5|22|销售|-15|22|8|-21.13|
|b|14|3.5|销售|10|4|4|-|3.5|
|b|14|3.5|采购|20 | 3 | 24 | (43.5 + 203)/24 | 3.08 |
|b|14|3.5|销售|5|4|19|-|3.08|
|b|14|3.5|采购|2 | 3.5 | 21 | (193.08 + 23.5)/21 | 3.12 |
|c|27|1|采购|100 | 0.95 | 127 | (271 + 1000.95)/127 | 0.96 |
|c|27|1|采购|3 | 1.1 | 130 | (1270.96 + 31.1)/130 | 0.96 |
你会如何使用Pandas?我尝试过使用groupby和cumsum,但我不知道如何介绍“if”语句。之后,我想总结一下信息,得到Product ID
以及最终的Stock
和WAC
,如下所示:
|产品ID |当前库存| WAC|
| ------------ | ------------ | ------------ |
|a |8 |21.13|
|b | 21 | 3.12|
|c | 130 | 0.96|
提前谢谢你!
2条答案
按热度按时间9wbgstp71#
您可以在
groupby
Dataframe 中创建一个函数并使用apply
调用它。我想试试这样的东西
这将在您呼叫时返回摘要信息:
df.groupby('Product ID').apply(calc_wac)
以上如果想要完整的 Dataframe ,只需更改函数返回到整个 Dataframe
return df_
5n0oy7gb2#
希望我能正确理解你的问题。
代码: