2016-04-07 3 views
0

私には3つの機能があります。 4つの列(MemberID、年、DSFS、DrugCount)でデータフレームを処理し、年ごとに分類された3つのデータフレーム、年を再フォーマットするヘルパー関数、年ごとにデータフレームを分類コード化する3つ目のデータフレームを返します。別の関数のデータフレームオブジェクトを使用するにはどうすればよいですか?

  • 第3の関数の入力として、年ごとに分類されたデータフレームはどのように取るのですか?
  • df['DSFS'].unique()を使用して固有のカテゴリのリストを検索したいと思います。私はdfとして何を使用しますか?

csvファイルのサンプル。

MemberID DSFS DrugCount 2 61221204 2- 3 months 1 8 30786520 1- 2 months 1 11 28420460 10-11 months 1 12 11861003 4- 5 months 1 14 66905595 6- 7 months 4

def process_DrugCount(drugcount): 
    dc = pd.read_csv("DrugCount.csv") 
    sub_map = {'1' : 1, '2':2, '3':3, '4':4, '5':5, '6':6, '7+' : 7} 
    dc['DrugCount'] = dc.DrugCount.map(sub_map) 
    dc['DrugCount'] = dc.DrugCount.astype(int) 
    dc_grouped = dc.groupby(dc.Year, as_index=False) 
    DrugCount_Y1 = dc_grouped.get_group('Y1') 
    DrugCount_Y2 = dc_grouped.get_group('Y2') 
    DrugCount_Y3 = dc_grouped.get_group('Y3') 
    DrugCount_Y1.drop('Year', axis=1, inplace=True) 
    DrugCount_Y2.drop('Year', axis=1, inplace=True) 
    DrugCount_Y3.drop('Year', axis=1, inplace=True) 
    return (DrugCount_Y1,DrugCount_Y2,DrugCount_Y3) 

def replaceMonth(string): 
    replace_map = {'0- 1 month' : "0_1", "1- 2 months": "1_2", "2- 3 months": "2_3", "4- 5 months": "4_5", "5- 6 months": "5_6", "6- 7 months": "6_7", "7- 8 months" : "7_8",\ 
        "8- 9 months": "8_9", "9-10 months": "9_10", "10-11 months": "10_11", "11-12 months": "11_12"} 
    a_new_string = string.map(replace_map) 
    return a_new_string 

def process_yearly_DrugCount(aframe): 
    processed_frame = None 
    dc = pd.read_csv("DrugCount.csv") 
    sub_map = {'1' : 1, '2':2, '3':3, '4':4, '5':5, '6':6, '7+' : 7} 
    dc['DrugCount'] = dc.DrugCount.map(sub_map) 
    dc['DrugCount'] = dc.DrugCount.astype(int) 
    dc_grouped = dc.groupby(dc.Year, as_index=False) 
    DrugCount_Y1 = dc_grouped.get_group('Y1') 
    DrugCount_Y1.drop('Year', axis=1, inplace=True) 
    # print DrugCount_Y1['DSFS'].unique 
    return processed_frame 
+0

「DrugCount.csv」のサンプルを追加できますか? – jezrael

答えて

0

あなたの例では、私にはスーパー明確ではありませんでしたが、ここにいくつかの有用な技術を実証パンダドキュメントに基づいて、わずかに異なる例である:

それはのように聞こえますgroupbyを使用するのではなく、df.pivot_tableを使用してマルチインデックスに変更する必要があります。

など。試してみてください。

import pandas.util.testing as tm; tm.N = 3 
def unpivot(frame): 
    N, K = frame.shape 
    data = {'value' : frame.values.ravel('F'), 
      'variable' : np.asarray(frame.columns).repeat(N), 
      'date' : np.tile(np.asarray(frame.index), K)} 
    return pd.DataFrame(data, columns=['date', 'variable', 'value']) 

df = unpivot(tm.makeTimeDataFrame()) 

をテストDFを作るために、そしてdf.headを比較する():

 date variable  value 
0 2000-01-03  A -0.357495 
1 2000-01-04  A 0.367520 
2 2000-01-05  A 2.216699 
3 2000-01-03  B -0.417521 
4 2000-01-04  B -1.163966 

印刷df.pivot_table(インデックスは=( "変数"、 "日付"))で

     value 
variable date     
A  2000-01-03 -0.357495 
     2000-01-04 0.367520 
     2000-01-05 2.216699 
B  2000-01-03 -0.417521 
     2000-01-04 -1.163966 
     2000-01-05 -0.774422 
C  2000-01-03 0.560017 
     2000-01-04 0.174880 
     2000-01-05 0.625167 
D  2000-01-03 -1.673194 
     2000-01-04 -0.075789 
     2000-01-05 -2.041236 

あなたはその後、df_pivoted.locを行うことができます[ 'A']はあなたに与えます:

  value 
date     
2000-01-03 -0.357495 
2000-01-04 0.367520 
2000-01-05 2.216699 

これを年を使ってあなたの例に簡単に適応させることができます。このタイプの操作にgroup byを使用するよりも簡単で、すべてのデータを1つのデータフレーム(ビュー)に保持します。

value_countsを使用して、すべての値とその頻度を見つけることもできます。だから私の例では:

df['variable'].value_counts() 

はシリーズを返します。

D 3 
B 3 
C 3 
A 3 
Name: variable, dtype: int64 

私が正しく理解している場合はここでそのシリーズのインデックスは、一意の値のリストです。だから

list(df['variable'].value_counts().index) 

あなたが望むものを与えてください。

関連する問題