2016-12-02 6 views
1

私は解決できない質問があります。あなたが私を助けることができるかどうかを見てみましょう。私はCOL名内の名前でグループ化したいと私はこれをやった後、私は最近、グループによってCOL 2にCOL 1の値を割り当てると仮定しパンダでのグループ分けの値の割り当て

df = pd.DataFrame(np.random.randint(0,3,size=(7, 4)),columns=['ONE', 'TWO', 'NAMES', 'FOUR'],index = fechas) 
df['NAMES'] = ['Peter','Jon',' Mary','Mary','Peter','Peter','Mary'] 

私はこのDFを持っています行われ、COL 4

の最初の0を持っている私は名前でグループ全体へのcol 1の要素の値を割り当てる必要が基準以下これは私が

  ONE TWO NAMES FOUR 
1970-01-01 0 0 Peter  0 
1970-01-02 2 1 Jon  0 
1970-01-03 1 0 Mary  0 
1970-01-04 1 1 Mary  0 
1970-01-05 0 2 Peter  1 
1970-01-06 2 2 Peter  0 
1970-01-07 0 0 Mary  1 

得たもので、私は次のようなものが必要です:

  ONE TWO NAMES FOUR 
1970-01-01 0 0 Peter  0 
1970-01-02 2 1 Jon  0 
1970-01-03 1 1 Mary  0 
1970-01-04 1 1 Mary  0 
1970-01-05 0 0 Peter  1 
1970-01-06 2 0 Peter  0 
1970-01-07 0 1 Mary  1 

私はそれがすべてうまく説明されることを願っています。 は、私はあなたがboolean indexingにより、すべての列FOUR0と行と最初の値を保持して、その後drop_duplicatesNAMESによって列を第一のフィルタが必要だと思うあなた

+0

私は巨大なDFを持っている、と私は1つの列の値でグループを作りたいです。次に、グループのどの要素に別の列に60000という要素があるかチェックします。その要素は、別の3番目の列から別の4番目の列に値を渡す「父」になります。解説が難しい場合は –

+0

を説明するのは難しいですが、あなたはまだその質問をする準備ができていません。 – DSM

+0

@jezraelはちょうどロジックを持っていますが、彼のコードはうまく動作しません。 –

答えて

1

ありがとうございます。そして、キーと値としてONEmapとしてdictNAMESに変換:

df = pd.DataFrame({ 
'ONE': [0, 2, 1, 1, 0, 2, 0], 
'TWO': [0, 1, 0, 1, 2, 2, 0], 
'NAMES': ['Peter', 'Jon', 'Mary', 'Mary', 'Peter', 'Peter', 'Mary'], 
'FOUR': [0, 0, 0, 0, 1, 0, 1]}) 
df = df[['ONE', 'TWO', 'NAMES', 'FOUR']] 
print (df) 
    ONE TWO NAMES FOUR 
0 0 0 Peter  0 
1 2 1 Jon  0 
2 1 0 Mary  0 
3 1 1 Mary  0 
4 0 2 Peter  1 
5 2 2 Peter  0 
6 0 0 Mary  1 
print (df[df.FOUR == 0].drop_duplicates(['NAMES'])) 
    ONE TWO NAMES FOUR 
0 0 0 Peter  0 
1 2 1 Jon  0 
2 1 0 Mary  0 

d = df[df.FOUR == 0].drop_duplicates(['NAMES']).set_index('NAMES')['ONE'].to_dict() 
print (d) 
{'Jon': 2, 'Mary': 1, 'Peter': 0} 

df.TWO = df.NAMES.map(d) 
print (df) 
      ONE TWO NAMES FOUR 
1970-01-01 0 0 Peter  0 
1970-01-02 2 2 Jon  0 
1970-01-03 1 1 Mary  0 
1970-01-04 1 1 Mary  0 
1970-01-05 0 0 Peter  1 
1970-01-06 2 0 Peter  0 
1970-01-07 0 1 Mary  1 
+1

私はカラム 'TWO'が' 2'であると思います。カラム 'FOUR'は最初に' 0'ですからです。 – jezrael

+0

それはうまく動作します。 1つ2つの名前4つより 1970-01-01 0 0.0 Peter 0 1970-01-02 2 2.0 Jon 0 1970-01-03 2 2.0 Mary 0 1970-01-04 2 NaN Mary 2 1970-01-05 2 0.0 Peter 1 1970-01-06 2 0.0 Peter 0 1970-01-07 0 NaN Mary 1 Peterのグループはうまくいますが、2番目と3番目のMaryは2列目に2.0が必要です。 –

+0

サンプルがあれば試してみてください。 – jezrael

関連する問題