2017-12-22 12 views
1

私は顧客のようなものを購入しているデータのテーブルがあるとします。頻度データからquantileを見つけるには?

Customer|Price|Quantity Sold 
a  | 200 | 3.3 
b  | 120 | 4.1 
c  | 040 | 12.0 
d  | 030 | 16.76 

これは、同じのために販売し、顧客、価格、および数量と、データのテーブルの粗製の表現であると考えられます製品。

この情報の購入価格の中央値を計算する方法を知りたいと思います。

私はパンダで分位を得ることがdata[row].quantile(x)

同じくらい簡単であることを取得するので、私は方法論に少し混乱取得していますが、各行は本当につ以上の観測を表しているので、私は は分位を取得する方法がわかりませんよ。

編集:それの上に、主要な問題は、販売量はディスクリートではないということです。それは連続変数です。 (私たちはメートル、kgsなどと話しているので、より多くの行を作成することはオプションではありません)

+0

'Price'値の' Quantity'リピートを含む展開されたシリーズを作成し、それを分数化できますか? –

+0

残念なことに、数量項目は実際には連続変数です。これにより、数量項目はさらに複雑になります。 – 2yan

+0

pd.Seriesを作成し、それには** describe()**メソッドがあります。それを試してください、あなたは非常に非常に便利です:) – IMCoins

答えて

1

離散値のセットの場合、中央値はソートして中央値をとることによって求められます。しかし、Quantityという連続した値があるので、確率分布の中央値を実際に探しているようです。Priceは、Quantityという相対的な頻度で分布しています。データを注文すると累積Quantityを取ることによって、私たちはあなたの問題のグラフィカル表現を考え出すことができます。

Cumulative distribution

あなたは中央値は、Xの中間点40(y値であることを、このプロットから見ることができます)。これは、2つの最低価格で売られた数量が非常に大きいために予想されるはずです。中央値は、データフレームから次のように計算できます。

df = df.sort_values('Price') 
cumul = df['Quantity Sold'].cumsum() 
# Get the row index where the cumulative quantity reaches half the total. 
total = df['Quantity Sold'].sum() 
index = sum(cumul < 0.5 * total) 
# Get the price at that index 
result = df['Price'].iloc[index] 

合計の異なる比率を使用して、同じデータの他の任意の尺度を計算することができます。

1

売り上げ数量をループし、各項目を大きなlist_of_all_soldに追加することができますまあ、これは)一つの例である:

c = ['a', 'b', 'c'] 
p = [200, 120, 40] 
qs = [3,4,12] 

list_of_all_sold = [] 
for i in range(len(qs)): 
    for x in range(qs[i]): 
     a.append(p[i]) 

はその後、Pythonの3.4+を使用すると、中央値を見つけるために使用できる統計パッケージを持っている:供給連続量の中央値を見つけるための

from statistics import median 
median(list_of_all_sold) 

EDIT:

パンダのデータフレームを作成し、価格でデータフレームをソートし、中央値を見つけてソートデータフレーム内の各プライスポイントで販売された数量を引いて、行ごとに中央値点を見つけるまで減らすことができます。

c = ['a', 'b', 'c', 'd'] 
p = [200, 120, 40, 30] 
qs = [3.3, 4.1, 12.0, 16.76] 
# Create a pandas dataframe 
import pandas as pd 
df = pd.DataFrame({'price' : p, 'qs' : qs}, index = c) 
# Find the index of the median number 
median_num_idx = sum(qs)/2 
# Go down dataframe sorted by price 
for index, row in df.sort_values('price').iterrows(): 
    # Subtract the quantity sold at that price point from the median number index 
    median_num_idx = median_num_idx - row['qs'] 
    # Check if you have reach the median index point 
    if median_num_idx <= 0: 
     print (row['price']) 
     break 
関連する問題