我想为每个日期创建一列Quantile。计算每个唯一值销售额的分位数。即,类别始终对应于每个特定日期的相同销售数量。使用分位数函数在熊猫分位数中创建新列
我有按日期编制索引的数据框。有许多日期和多个相同的日期。 DF的子集1天的例子:
Category Sales Ratio 1 Ratio 2
11/19/2016 Bar 300 0.46 0.96
11/19/2016 Bar 300 0.56 0.78
11/19/2016 Bar 300 0.43 0.96
11/19/2016 Bar 300 0.47 0.94
11/19/2016 Casino 550 0.92 0.12
11/19/2016 Casino 550 0.43 0.74
11/19/2016 Casino 550 0.98 0.65
11/19/2016 Casino 550 0.76 0.67
11/19/2016 Casino 550 0.79 0.80
11/19/2016 Casino 550 0.90 0.91
11/19/2016 Casino 550 0.89 0.31
11/19/2016 Café 700 0.69 0.99
11/19/2016 Café 700 0.07 0.18
11/19/2016 Café 700 0.75 0.59
11/19/2016 Café 700 0.07 0.64
11/19/2016 Café 700 0.14 0.42
11/19/2016 Café 700 0.30 0.67
11/19/2016 Pub 250 0.64 0.09
11/19/2016 Pub 250 0.93 0.37
11/19/2016 Pub 250 0.69 0.42
我想它增加了一个名为位数新列其计算每个代码迄今为止,0.5分位数独特的销售。关键要注意的是,对于特定日期的某个类别,销售总是相同的(事情随日期变化而变化)。解决方案示例:df ['Quantile'] = df.Sales.groupby(df.index).transform(lambda x:x.quantile(q = 0.5,axis = 0,interpolation ='midpoint')) )
然而,这还不够(即使它工作)。对于这个例子(对于这个日期),在新列df ['Quantile']中,所有的值对于一个部分日期都是相同的。
对于这个日期,分位数计算将使用300,550,700和250。
因此最终的DF应该是这样的:
Category Sales Ratio 1 Ratio 2 Quantile
11/19/2016 Bar 300 0.46 0.96 425
11/19/2016 Bar 300 0.56 0.78 425
11/19/2016 Bar 300 0.43 0.96 425
11/19/2016 Bar 300 0.47 0.94 425
11/19/2016 Casino 550 0.92 0.12 425
11/19/2016 Casino 550 0.43 0.74 425
11/19/2016 Casino 550 0.98 0.65 425
11/19/2016 Casino 550 0.76 0.67 425
11/19/2016 Casino 550 0.79 0.80 425
11/19/2016 Casino 550 0.90 0.91 425
11/19/2016 Casino 550 0.89 0.31 425
11/19/2016 Café 700 0.69 0.99 425
11/19/2016 Café 700 0.07 0.18 425
11/19/2016 Café 700 0.75 0.59 425
11/19/2016 Café 700 0.07 0.64 425
11/19/2016 Café 700 0.14 0.42 425
11/19/2016 Café 700 0.30 0.67 425
11/19/2016 Pub 250 0.64 0.09 425
11/19/2016 Pub 250 0.93 0.37 425
11/19/2016 Pub 250 0.69 0.42 425
如果我是做一个特定日期的所有销售的位数不看每一个类别,我会得到类似550的只有一个元素(这我不想)。
关键是我希望代码简单,而且速度相当快(因为日期相当大)。插值必须是中点。
有没有办法来添加参数仅下降类别的副本特定日期?因为可能有类别具有相同的销售价值?即每个日期只对每个类别分位一个销售价值? – MysterioProgrammer91
您可以根据您的要求更改样品吗?你需要'先过滤'如'df1 = df [df.duplicated(subset = ['Category','Sales'])&(df.index.isin(['11-19-2016','11-20 -2016']))]'然后应用分位数? – jezrael
非常感谢 – MysterioProgrammer91