2017-05-28 10 views
2

はここだから我々は今、6基を有していてDataFrameの各行にグループ名を割り当てる方法は?

for name, group in df.groupby(['A', 'B']): 
    print(name) 
    print(group) 


('bar', 'one') 
    A B   C   D 
1 bar one -0.318147 0.384239 
('bar', 'three') 
    A  B   C   D 
3 bar three 0.331456 0.914334 
('bar', 'two') 
    A B   C   D 
5 bar two 0.258204 -1.476305 
('foo', 'one') 
    A B   C   D 
0 foo one 1.215172 -0.861875 
6 foo one -0.338992 0.856365 
('foo', 'three') 
    A  B   C   D 
7 foo three -0.311692 -0.159846 
('foo', 'two') 
    A B   C   D 
2 foo two 1.729844 -0.173781 
4 foo two 2.038198 -0.354784 

よう

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 
         'foo', 'bar', 'foo', 'foo'], 
        'B' : ['one', 'one', 'two', 'three', 
         'two', 'two', 'one', 'three'], 
        'C' : np.random.randn(8), 
        'D' : np.random.randn(8) 
        }) 

    A B  C   D 
0 foo one 1.215172 -0.861875 
1 bar one -0.318147 0.384239 
2 foo two 1.729844 -0.173781 
3 bar three 0.331456 0.914334 
4 foo two 2.038198 -0.354784 
5 bar two 0.258204 -1.476305 
6 foo one -0.338992 0.856365 
7 foo three -0.311692. -0.159846 

とAとBでグループ化され、サンプルDFです。

質問:Gという名前の新しい列を追加し、その値が行が属するグループによって決定されるグループ名(たとえばG1、G2 ... G6)であるようにする方法。ここで

はDFが最終的にどのように見えるかです:

 A B  C   D   G 
0 foo one 1.215172 -0.861875  G4 
1 bar one -0.318147 0.384239  G1 
2 foo two 1.729844 -0.173781  G6 
3 bar three 0.331456 0.914334  G2 
4 foo two 2.038198 -0.354784  G6 
5 bar two 0.258204 -1.476305  G3 
6 foo one -0.338992 0.856365  G4 
7 foo three -0.311692. -0.159846  G5 

はあなたの助けに感謝します。

答えて

5

リベースする必要のある保留中のPRがあります。この質問はちょうど私にそれを取り巻くよう動機づけてくれました.-これは最終的に私たちにこの情報にアクセスするためのきれいな方法を与えます。その間、グループコードは実際にgroupbyオブジェクト内にあり、ちょっと隠されています。

In [97]: df["GN"] = df.groupby(["A","B"]).grouper.group_info[0] 

In [98]: df["G"] = "G" + (df["GN"] + 1).astype(str) 

In [99]: df 
Out[99]: 
    A  B   C   D GN G 
0 foo one -1.245506 0.307395 3 G4 
1 bar one 0.072989 -0.402182 0 G1 
2 foo two 0.399269 0.794413 5 G6 
3 bar three 0.475859 -0.685398 1 G2 
4 foo two -0.463065 -0.222632 5 G6 
5 bar two 0.696606 -0.999691 2 G3 
6 foo one -1.211876 -0.368574 3 G4 
7 foo three -0.936385 -1.067160 4 G5 
+0

あなたはそのPRへのリンクを投稿できますか? ;) – MaxU

+0

https://github.com/pandas-dev/pandas/pull/14026 – chrisb

+0

ありがとうございました!まさに私が何をしたのか。 – Round

関連する問題