2016-05-09 4 views
0

データフレームの行の値をグループ化した後に変更したい。 具体的に私はこのようなデータフレームを持っている:pandasデータフレームのグループ内の行を操作する

 A B C D 
index 
x  2 1.4 2.3 0 
x  4 2.4 0.5 0 
y  5 3.3 0.3 0 
y  6 1.1 6.3 0 
y  1 3.6 0.2 0 
x  4 0.4 0.9 0 
z  2 0.8 1.1 0 

IインデックスをGROUPBY、各グループAの最初のn個の行に値を割り当て、別のラベルを休またいです。

n = 2 
groups=df.groupby(df.index) 
for key,grp in groups: 
    df.loc[key]['D'][0:n-1]=0 
    df.loc[key]['D'][n-1:]=1 

これは、いくつかのデータフレーム上で動作し、他の人にされていません。現在、私はこのような何かを持っている残りD = 1

A B C D 
index 
x  2 1.4 2.3 0 
x  4 2.4 0.5 0 
y  5 3.3 0.3 0 
y  6 1.1 6.3 0 
y  1 3.6 0.2 1 
x  4 0.4 0.9 1 
z  2 0.8 1.1 0 

、インデックスとしてのxを持つ2つの行はD = 0を持つことになりますので、最初の。

答えて

0

あなたは、インデックスGROUPBYを行い、その後、ncumcountの結果を比較できます。

>>> df.groupby(level=0).cumcount() 
index 
x 0 
x 1 
y 0 
y 1 
y 2 
x 2 
z 0 
dtype: int64 
cumcountので、作品

>>> df["ilab"] = (df.groupby(level=0).cumcount() >= n).astype(int) 
>>> df 
     A B C D ilab 
index      
x  2 1.4 2.3 0  0 
x  4 2.4 0.5 0  0 
y  5 3.3 0.3 0  0 
y  6 1.1 6.3 0  0 
y  1 3.6 0.2 0  1 
x  4 0.4 0.9 0  1 
z  2 0.8 1.1 0  0 

ごとのグループに増加する値を返します。

関連する問題