有一个数据框由一列数字组成,其中仅包含“0,1,2”。其中‘1’和‘2’交替出现,不会连续出现两个‘1’或两个‘2’。
我的目标是将此列中 1 到 2 之间的所有值(从 1 开始,包括 1 和 2)更改为特殊值“9”。也许我可以通过循环整个 df 来做到这一点,但我想知道 pandas 是否有更简单的方法来做到这一点?
df = pd.DataFrame({'a':[2, 0, 1, 2, 0, 1, 0, 0, 2, 0, 1, 0, 0, 2, 0, 1]})
>>> df
a desired
0 2 2
1 0 0
2 1 9
3 2 9
4 0 0
5 1 9
6 0 9
7 0 9
8 2 9
9 0 0
10 1 9
11 0 9
12 0 9
13 2 9
14 0 0
15 1 1
最佳答案
IIUC,可以组成以1开头的正向组,以2结尾的反向组,然后组成普通组。如果一组以 1 开始并以 2 结束,则用 9 填充它:
g1 = df['a'].eq(1).cumsum()
g2 = df['a'].eq(2)[::-1].cumsum()
m = df.groupby([g1, g2])['a'].transform(lambda g: g.iloc[0]==1 and g.iloc[-1]==2)
df['desired'] = pd.Series(9, index=m.index).mask(~m, df['a'])
输出:
a desired
0 2 2
1 0 0
2 1 9
3 2 9
4 0 0
5 1 9
6 0 9
7 0 9
8 2 9
9 0 0
10 1 9
11 0 9
12 0 9
13 2 9
14 0 0
15 1 1
关于python - 修改数据帧列中一对值之间的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73459689/