2016-05-09 28 views
0

我想在對數據幀進行分組後對其值進行更改。 具體我有一個數據幀這樣的:在熊貓數據幀中處理組內的行

 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 

欲GROUPBY索引和值分配給每個組的第一n行和休息另一個標籤。因此,前兩排,其中x爲指標將有d = 0,其餘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 

目前,我有這樣的事情:

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 

這適用於某些dataframes並沒有對他人。

回答

0

你可以做一個索引GROUPBY然後的cumcount結果比較n

>>> 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 

這工作,因爲cumcount返回每組增加值:

>>> df.groupby(level=0).cumcount() 
index 
x 0 
x 1 
y 0 
y 1 
y 2 
x 2 
z 0 
dtype: int64