【发布时间】:2022-01-23 05:19:15
【问题描述】:
我有以下数据框:
df1 = pd.DataFrame(
{
"A_price": [10, 12, 15],
"B_price": [20, 19, 29],
"C_price": [23, 21, 4],
"D_price": [45, 47, 44],
},
index = ['01-01-2020', '01-02-2020', '01-03-2020']
)
df2 = pd.DataFrame(
{
"A_weight": [0.1, 0.2, 0.4],
"B_weight": [0.2, 0.5, 0.1],
"C_weight": [0.3, 0.2, 0.1],
"D_weight": [0.4, 0.1, 0.4],
},
index = ['01-01-2020', '01-02-2020', '01-03-2020']
)
out = pd.merge(df1, df2, left_index=True, right_index=True)
out.columns = out.columns.str.split('_', expand=True)
out = out.sort_index(axis=1)
out:
A B C D
price weight price weight price weight price weight
01-01-2020 10 0.1 20 0.2 23 0.3 45 0.4
01-02-2020 12 0.2 19 0.5 21 0.2 47 0.1
01-03-2020 15 0.4 29 0.1 4 0.1 44 0.4
我想要做的是计算加权中位数,该中位数通过按 price 对(重量,价格)对进行排序,然后累积权重,直到跨越 50% 累积权重的两个价格点找到了。
然后我们在这两个(权重、价格)对之间进行插值,以找到累积权重为 50% 的价格,然后将该价格放入新的 DataFrame 中。
更新:我更改了我的数据框,因此它更能反映我目前拥有的内容。
我想要的输出将是每行的加权中位数。意思是,对于索引“01-01-2020”的行,我希望中位数是 price = 23 的插值,因为当您在行中添加权重时,我们有 0.1+0.2+0.3 > 0.5。所以我会得到一个如下所示的价格数据框:
df_prices:
Price
01-01-2020 23
01-02-2020 19
01-03-2020 29
【问题讨论】:
-
能否添加一个包含预期输出的示例数据框?
-
为什么我们有两列 A 和 B?
-
我更新了我的问题。本质上,最终数据框中的价格应该是每行按升序排序后跨越 50% 权重的两个价格的插值。
标签: python pandas dataframe aggregate-functions cumulative-sum