2016-05-15 2 views
2

私はこれを初心者であり、次の問題を解決するために探しています。私は、1週間のうちに毎日発生する複数のキーワード検索に基づいてSKUの検索ランクを持つデータセットを持っています。複数の識別子に基づいて値の中央値を求め、行に追加

その特定の日のSKUの検索ランクのmedian(またはmean、またはstd)のデータを追加することができます。

import csv 
import numpy as np 
import pandas as pd 
from pandas import DataFrame 

df = pd.read_csv('searchdata.csv') 

dfdataIwant = df[['Date', 'SKU', 'Search_Rank']] 
print dfdataIwant.groupby(['Date','SKU']).median() 

これは私が探している値medianを取得します。しかし、私がしたいのは、medianの値を新しい列に挿入することです。この列に挿入するmedianの値は、正しい日付とSKUに対応する必要があります。

+1

はSOへようこそ!それがあなたの質問を解決するのに役立つなら、答えを受け入れることを忘れないでください。人々は助けに努力し、少なくとも敬意を払ってそうする必要があります:) – Anzel

+0

申し訳ありません!将来的にはより良い仕事をするでしょう。フレンドリーな思い出に感謝します。 –

答えて

1

あなたが元DataFrameに(see docs)を.grouby()集計結果を割り当てる場合.transform()があります:

あなたにも言及し、他の統計のために利用可能な
df['median'] = data.groupby(['Date','SKU'])['Search Rank'].transform('median') 

。例:中

df = pd.DataFrame(data={'rank': np.random.randint(low=1, high=100, size=500), 
         'SKU': np.random.choice(list('ABCDE'), replace=True, size=500), 
         'date': np.array([d for d in repeat(pd.date_range(start=date(2016,1,1), freq='D', periods=20), 25)]).flatten()}) 

df['median'] = df.groupby(['date','SKU'])['rank'].transform('median') 

結果:

df.sort_values(['date', 'SKU', 'rank']) 

    SKU  date rank median 
460 A 2016-01-01  4 66.0 
80 A 2016-01-01 29 66.0 
400 A 2016-01-01 38 66.0 
220 A 2016-01-01 64 66.0 
480 A 2016-01-01 68 66.0 
160 A 2016-01-01 69 66.0 
200 A 2016-01-01 70 66.0 
360 A 2016-01-01 86 66.0 
280 B 2016-01-01 14 22.0 
300 B 2016-01-01 30 22.0 
380 C 2016-01-01 35 63.0 
240 C 2016-01-01 46 63.0 
440 C 2016-01-01 63 63.0 
20 C 2016-01-01 69 63.0 
340 C 2016-01-01 91 63.0 
100 D 2016-01-01 32 59.0 
40 D 2016-01-01 38 59.0 
120 D 2016-01-01 59 59.0 
320 D 2016-01-01 77 59.0 
260 D 2016-01-01 94 59.0 
0  E 2016-01-01 31 60.0 
420 E 2016-01-01 35 60.0 
140 E 2016-01-01 60 60.0 
60 E 2016-01-01 64 60.0 
180 E 2016-01-01 99 60.0 
441 A 2016-01-02 35 52.0 
281 A 2016-01-02 52 52.0 
481 A 2016-01-02 71 52.0 
341 B 2016-01-02 73 88.0 
81 B 2016-01-02 81 88.0 
.. ..  ... ...  ... 
418 D 2016-01-19 98 71.5 
38 E 2016-01-19 50 54.0 
458 E 2016-01-19 51 54.0 
478 E 2016-01-19 57 54.0 
18 E 2016-01-19 71 54.0 
439 A 2016-01-20  9 45.0 
499 A 2016-01-20 45 45.0 
99 A 2016-01-20 63 45.0 
279 B 2016-01-20 12 55.5 
339 B 2016-01-20 29 55.5 
459 B 2016-01-20 44 55.5 
379 B 2016-01-20 53 55.5 
319 B 2016-01-20 58 55.5 
39 B 2016-01-20 84 55.5 
299 B 2016-01-20 94 55.5 
119 B 2016-01-20 98 55.5 
199 C 2016-01-20 15 43.0 
159 C 2016-01-20 43 43.0 
479 C 2016-01-20 90 43.0 
259 D 2016-01-20 12 33.0 
419 D 2016-01-20 13 33.0 
59 D 2016-01-20 15 33.0 
139 D 2016-01-20 31 33.0 
79 D 2016-01-20 33 33.0 
19 D 2016-01-20 42 33.0 
239 D 2016-01-20 46 33.0 
399 D 2016-01-20 54 33.0 
219 D 2016-01-20 63 33.0 
179 E 2016-01-20 27 53.5 
359 E 2016-01-20 80 53.5 
+0

こんにちはステファン、 これは魅力的だった。ご助力ありがとうございます。 –

関連する問題