Python 根据条件更改数据帧行中的值

Python 根据条件更改数据帧行中的值,python,pandas,Python,Pandas,我有这个数据框 Region 2021 2022 2023 0 Europe 0.00 0.00 0.00 1 N.Amerca 0.50 0.50 0.50 2 N.Amerca 4.40 4.40 4.40 3 N.Amerca 0.00 8.00 8.00 4 Asia 0.00 0.00 1.75 5 Asia 0.00

我有这个数据框

    Region      2021    2022    2023
0   Europe      0.00    0.00    0.00
1   N.Amerca    0.50    0.50    0.50
2   N.Amerca    4.40    4.40    4.40
3   N.Amerca    0.00    8.00    8.00
4   Asia        0.00    0.00    1.75
5   Asia        0.00    0.00    0.00
6   Asia        0.00    0.00    2.00
7   N.Amerca    0.00    0.00    0.50
8   Eurpoe      6.00    6.00    6.00
9   Asia        7.50    7.50    7.50
10  Asia        3.75    3.75    3.75
11  Asia        3.50    3.50    3.50
12  Asia        3.80    3.80    3.80
13  Asia        0.00    0.00    0.00
14  Europe      6.52    6.52    6.52
一旦在2021年找到一个值,它应该在2022年和2023年的剩余时间内携带一个0 如果在2022年找到一个值,那么它应该将0带到其余部分。换句话说,一旦在第2021列和第4列中找到值,右边的其余部分应为零

预期结果将是:

    Region      2021    2022    2023
0   Europe      0.00    0.00    0.00
1   N.Amerca    0.50    0.00    0.00
2   N.Amerca    4.40    0.00    0.00
3   N.Amerca    0.00    8.00    0.00
4   Asia        0.00    0.00    1.75
5   Asia        0.00    0.00    0.00
6   Asia        0.00    0.00    2.00
7   N.Amerca    0.00    0.00    0.50
8   Eurpoe      6.00    0.00    0.00
9   Asia        7.50    0.00    0.00
10  Asia        3.75    0.00    0.00
11  Asia        3.50    0.00    0.00
12  Asia        3.80    0.00    0.00
13  Asia        0.00    0.00    0.00
14  Europe      6.52    0.00    0.00
我已尝试应用lambda:

def foo(r):
   #if r['2021')>0: then 2020 and forth should be zero) 

df = df.apply(lambda x: foo(x), axis=1)
但挑战在于,从2021年到2030年,粮食问题变得一团糟

让我们尝试复制一下

这是另一种方式:

df2 = df.set_index('Region').diff(axis=1).reset_index()
df2['2021'] = df['2021']

@ProcolHarum我不确定为什么~可能只是不喜欢应用程序~我知道应用程序是一个内存消耗程序,但您的答案在现场我不确定->还没有尝试过,但也许您还可以一起探索轴=1上的df.shift和轴=1上的cumsum,以将其置于一个条件中:
df2 = df.set_index('Region').diff(axis=1).reset_index()
df2['2021'] = df['2021']