如何根据随后的行单元格值更改数据帧单元格的值?

时间:2019-11-25 19:57:36

标签: python pandas dataframe

我正在使用Python和Pandas DataFrames。

我的数据框看起来像这样:

Index    A       B    Copy_of_B
1        a       0       0
2        a       1       1
3        a       5       5
4        b       0       0
5        b       4       4
6        c       6       6

我的预期输出是:

Index    A       B    Copy_of_B
1        a       0       1
2        a       1       1
3        a       5       5
4        b       0       4
5        b       4       4
6        c       6       6

我想用下一行中的值替换Copy_of_B列中的0值,但是我不想使用for循环进行迭代。 有一个简单的解决方案吗?

谢谢

Barna

2 个答案:

答案 0 :(得分:0)

您可以使用maskbfill

df['Copy_of_B'] = df['B'].mask(df['B'].eq(0)).bfill()

输出:

   Index  A  B  Copy_of_B
0      1  a  0        1.0
1      2  a  1        1.0
2      3  a  5        5.0
3      4  b  0        4.0
4      5  b  4        4.0
5      6  c  6        6.0

答案 1 :(得分:0)

我利用您的DataFrame具有由连续数字组成的索引这一事实。

从创建2个索引开始:

ind = df[df.Copy_of_B == 0].index
ind2 = ind + 1

第一个包含行的索引值,其中 Copy_of_B == 0 。 第二个包含后续行的索引。

然后,要将数据从后续行“复制”到包含零的行,请运行:

df.loc[ind, 'Copy_of_B'] = df.loc[ind2, 'Copy_of_B'].tolist()

如您所见,没有在整个DataFrame上运行的任何循环。