numpy 在两个特定的唯一值之间填充值

xesrikrc  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(95)

我有一个以下的框架:
| 指数|值|
| --|--|
| 1 |没有一|
| 2 |一|
| 3 |没有一|
| 4 |一|
| 5 |B|
| 6 |B|
| 7 |没有一|
| 8 |一|
| 9 |一|
| 10 |B|
我们的想法是在A和B之间填充None,这样列中就没有连续的A或B。
期望输出
| 指数|值|
| --|--|
| 1 |没有一|
| 2 |一|
| 3 |没有一|
| 4 |没有一|
| 5 |B|
| 6 |没有一|
| 7 |没有一|
| 8 |一|
| 9 |没有一|
| 10 |B|
这可以很容易地通过循环来完成,但由于我使用的是pandas和numpy,我希望避免使用循环方法。

d6kp6zgx

d6kp6zgx1#

你可以ffill来向前传播非None,然后shift,只保留与布尔索引的新系列不相同的值:

df.loc[df['Value'].eq(df['Value'].ffill().shift()), 'Value'] = None

字符串
mask

df['Value'] = df['Value'].mask(df['Value'].eq(df['Value'].ffill().shift()), None)


输出量:

index Value
0      1  None
1      2     A
2      3  None
3      4  None
4      5     B
5      6  None
6      7  None
7      8     A
8      9  None
9     10     B


中间体:

index Value ffill shift     eq
0      1  None  None  None   True
1      2     A     A  None  False
2      3  None     A     A  False
3      4     A     A     A   True
4      5     B     B     A  False
5      6     B     B     B   True
6      7  None     B     B  False
7      8     A     A     B  False
8      9     A     A     A   True
9     10     B     B     A  False

相关问题