2017-05-22 9 views
1

の値に基づいて条件付きサブセットは、私は次のPythonのデータフレームを以下に示しています。各「地域」についてはPythonのデータフレーム:3つの異分野

enter image description here

私が記載されているショーにしたいどのような活動のための具体的な基準を持っていますa)はリージョン1の場合は、私が会うの「アクティビティ」と最初の3つのアカウントと呼び

Bの「アクティビティ」と最初の2つのアカウントを表示したい

)私が欲しいリージョン2については、下記を表示する私はちょうど私が以下

は、得られるデータフレームである「ランク」でトップ6アカウントを表示したい地域4については、

Cを満たすの「アクティビティ」とコールし、最初のアカウントの「アクティビティ」と最初のアカウント)取得するためにWAN:

enter image description here

私は以下のコードを使用することにより、地域会議や通話の同じ数を得ることができます。しかし、地域の基準に基づいて、さまざまな会議や電話のサブセットを取得する方法はわかりません。

d1 = data[data['Activity'] == 'meeting'].groupby('Region')\ 
     .apply(lambda x: x.sort_values('Rank')[:3]) 
d2 = data[data['Activity'] == 'call'].groupby('Region')\ 
     .apply(lambda x: x.sort_values('Rank')[:2])  
pd.concat([d1, d2]) 

ご協力いただきありがとうございます。

+1

あなたの最初の画像は、第二のと同じですが、私はあなたがそれを編集する必要があるかもしれないと思います。 –

+1

はい!あなたは正しいです...訂正をしました – PineNuts0

+0

あなたはそれを解決しましたか? –

答えて

0

私は単純な方法でスライスし、ブランクの結果データフレームに追加します。

import pandas as pd 

#Create test dataframe 
a = pd.DataFrame([['A', 1, 1, 'meeting'], 
        ['B', 1, 2, 'meeting'], 
        ['C', 1, 3, 'meeting'], 
        ['D', 1, 4, 'meeting'], 
        ['E', 1, 5, 'call'], 
        ['F', 1, 6, 'call'], 
        ['G', 1, 7, 'call'], 
        ['H', 2, 1, 'call'], 
        ['I', 2, 2, 'call'], 
        ['J', 2, 3, 'meeting'], 
        ['K', 2, 4, 'meeting'], 
        ['L', 2, 5, 'meeting'], 
        ['M', 2, 6, 'meeting'], 
        ['N', 2, 7, 'meeting'], 
        ['O', 2, 8, 'meeting'], 
        ['P', 4, 1, 'call'], 
        ['Q', 4, 2, 'meeting'], 
        ['R', 4, 3, 'call'], 
        ['S', 4, 4, 'meeting'], 
        ['T', 4, 5, 'call'], 
        ['U', 4, 6, 'meeting'], 
        ['V', 4, 7, 'call']], columns=['Account', 'Region', 'Rank', 'Activity']) 


#Create blank df 
result = pd.DataFrame(columns=['Account', 'Region', 'Rank', 'Activity']) 

temp = a[a['Region']==1] #Slice region 1 
temp = temp[temp['Activity']=='meeting'].sort_values('Rank')[:3] #Slice activity meeting then sort and get first 3 

result = pd.concat([result, temp]) #Add to result df 

temp = a[a['Region']==1] #Slice region 1 
temp = temp[temp['Activity']=='call'].sort_values('Rank')[:2] #Slice activity call then sort and get first 2 

result = pd.concat([result, temp]) #Add to result df 

temp = a[a['Region']==2] #Slice region 2 
temp = temp[temp['Activity']=='meeting'].sort_values('Rank')[:1] #Slice activity meeting then sort and get first one 

result = pd.concat([result, temp]) #Add to result df 

temp = a[a['Region']==2] #Slice region 2 
temp = temp[temp['Activity']=='call'].sort_values('Rank')[:1] #Slice activity call then sort and get first 1 

result = pd.concat([result, temp]) #Add to result df 

temp = a[a['Region']==4] #Slice region 4 
temp = temp.sort_values('Rank')[:6] #Sort then get first 6 

result = pd.concat([result, temp]) #Add to result df 

result['Region'] = result['Region'].apply(lambda x: int(x)) #Trim result of region and rank column 
result['Rank'] = result['Rank'].apply(lambda x: int(x)) #Trim result of region and rank column 

結果は次のようになります。

 Account Region Rank Activity 
0  A  1  1 meeting 
1  B  1  2 meeting 
2  C  1  3 meeting 
4  E  1  5  call 
5  F  1  6  call 
9  J  2  3 meeting 
7  H  2  1  call 
15  P  4  1  call 
16  Q  4  2 meeting 
17  R  4  3  call 
18  S  4  4 meeting 
19  T  4  5  call 
20  U  4  6 meeting 
関連する問題