我希望在对数据帧进行分组后更改它们的值。 具体来说,我有一个这样的数据框:
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
这适用于某些数据框,而不适用于其他数据框。
答案 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