2016-05-09 22 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