【发布时间】:2017-06-06 10:42:18
【问题描述】:
我有一个包含 10 列的数据框 (df)。该索引有许多不同的日期,但是有多个相同的日期(并且按日期排序)。此外,此问题的重要列是 df['Weight'] 和 df['Price']。
这是一个只有 1 个索引值(2017 年 1 月 21 日)的 2 列数据示例,实际上有多个具有多个权重的日期等。
Weight Price
1/21/2017 0.1 12
1/21/2017 0.04 21
1/21/2017 0.03 13
1/21/2017 0.02 22
1/21/2017 0.2 27
1/21/2017 0.001 30
1/21/2017 0.1 34
1/21/2017 0.21 21
1/21/2017 0.003 12
1/21/2017 0.01 32
1/21/2017 0.04 21
1/21/2017 0.005 12
1/21/2017 0.05 10
1/21/2017 0.1 3
1/21/2017 0.091 24
特定索引的权重加起来为 1,对于索引的每个唯一日期都是如此。
现在我正在尝试创建一个列 df['adjusted weight'] ,它将基于特定日期的每个价格值的百分比排名。
相对于特定日期的其他价格处于中间 80% 的价格,df['adjusted weight'] 将等于 df['Weight']。
对于特定日期最后 10% 的价格,df['Adjusted weight'] 将是 df['Weight'] / 2 。
对于任何日期的前 10% 的价格,我们需要调整调整后的权重,以便该日期的新 df[调整后的权重'] 现在等于 1。
这可以通过将某个日期价格位于前 10% 的所有权重除以当前前 10% 价格的权重总和,然后乘以该数字本身 + 总和从底部的10%切掉的重量,使其再次成为1。
这是我想要的输出:
Weight Price Percent rank Adjusted Weight
1/21/2017 0.1 12 0.142 0.1
1/21/2017 0.04 21 0.428 0.04
1/21/2017 0.03 13 0.357 0.03
1/21/2017 0.02 22 0.642 0.02
1/21/2017 0.2 27 0.785 0.2
1/21/2017 0.001 30 0.857 0.001
1/21/2017 0.1 34 1 **0.168181818**
1/21/2017 0.21 21 0.428 0.21
1/21/2017 0.003 12 0.142 0.003
1/21/2017 0.01 32 0.928 **0.016818182**
1/21/2017 0.04 21 0.428 0.04
1/21/2017 0.005 12 0.142 0.005
1/21/2017 0.05 10 0.071 **0.025**
1/21/2017 0.1 3 0 **0.05**
1/21/2017 0.091 24 0.714 0.091
我已将 ** 放在已更改的值周围,巧合的是,有 2 个值位于底部 10% pct 等级,2 个值位于顶部 10% 等级。对于底部 2 个值,它只是 weight/2 ,对于顶部 2,我在 excel 中编写了这个公式, =E8/(E11+E8)*(E11+E8+E15+E14-(H15+H14)) 其中 tha table跨度从 D1 到 H16。
这是一个相当棘手的问题,但我希望以合理的方式提出问题。如果有人可以提供建议和帮助,我将不胜感激。感谢您阅读并喜欢听到我得到的想法。此外,数据集很大,所以我不确定需要多长时间,因为每个日期都需要做同样的工作。
我希望调整后的权重成为与原始权重一起存在的新列。此外,可以与其他列以及价格一起使用的东西会很棒。
非常感谢大家的帮助和支持。
最好的祝愿。
【问题讨论】:
标签: python pandas indexing dataframe indices