假设我有以下数据帧:
df = pd.DataFrame({'a':[0,0,0,1,0,0], 'b':[0,0,1,0,0,0], 'c':[0,1,1,0,0,0]})
df.index = pd.date_range('2000-03-02', periods=6, freq='D')
看起来像这样:
^{pr2}$现在我想把给定列中最后一个1之后的每个值设置为2。预期结果如下:
a b c
2000-03-02 0 0 0
2000-03-03 0 0 1
2000-03-04 0 1 1
2000-03-05 2 2 2
2000-03-06 2 2 2
2000-03-07 2 2 2
我有一个代码,可以工作:
cols = df.columns
for col in cols:
s = df[col]
x = s[s==1].index[-1]
df[col][(x + 1):] = 2
但这似乎很尴尬,而且与熊猫的精神背道而驰(unpandonic?)。有什么更好的方法吗?在
一种方法是用nan来^{} 下零:
现在可以使用^{} 将这些更改为2:
^{pr2}$编辑:在这里使用cumsum的技巧可能会更快:
这是一个非常通用的解决方案(例如,如果索引是非连续的,您将失败)。 第一部分,得到索引器是相当大的麻烦!在
我认为这是一种矢量化的方法,你所要做的就是根据上面的索引器构造正确的布尔矩阵,但是会让我的大脑受伤。在
^{pr2}$相关问题 更多 >
编程相关推荐