在pandas数据帧中操作组内的行

时间:2016-05-09 03:37:13

标签: python 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

我想分组索引并为每个组a的前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

这适用于某些数据框,而不适用于其他数据框。

1 个答案:

答案 0 :(得分:0)

您可以执行索引组,然后将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