我想爲每個日期創建一列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