我有以下数据框:

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

其思想是在A和B之间填零,以使该列中没有连续的A或B.

期望输出

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

使用循环可以很容易地做到这一点,但由于我使用的是Pandas 和NumPy,我希望避免使用循环方法.

推荐答案

您可以 Select ffill向前传播非None,然后 Select shift,只保留与此新系列不同的值boolean indexing:

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

Python相关问答推荐

在pandas DataFrame上运行apply()时如何访问DateTime索引?

将大小为n*512的数组绘制到另一个大小为n*256的数组的PC组件

使用Python进行网页抓取,没有页面

是什么导致对Python脚本的jQuery Ajax调用引发500错误?

Python无法在已导入的目录中看到新模块

symy.分段使用numpy数组

Python中使用时区感知日期时间对象进行时间算术的Incredit

在函数内部使用eval(),将函数的输入作为字符串的一部分

根据条件将新值添加到下面的行或下面新创建的行中

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

如何标记Spacy中不包含特定符号的单词?

从numpy数组和参数创建收件箱

为什么这个带有List输入的简单numba函数这么慢

管道冻结和管道卸载

Django RawSQL注释字段

python中的解释会在后台调用函数吗?

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

如何在Pyplot表中舍入值

ModuleNotFoundError:没有模块名为x时try 运行我的代码''