pandas 如何在python中基于一列填充另一列?

1yjd4xko  于 2023-01-07  发布在  Python
关注(0)|答案(1)|浏览(319)

我有一个df,看起来像这样:

ID       Test Done      Test Action    Test Date
1234     Happy Test     Decline        2021-11-30
1234     None           Decline        None
1235     Sad Test       Decline        2022-03-24
1235     None           Decline        2022-03-04
1235     None           Decline        2022-03-04
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06

我试图填充TestDone中所有与ID号关联的None或空字段,所以我希望我的df看起来像......

ID       Test Done      Test Action    Test Date
1234     Happy Test     Decline        2021-11-30
1234     Happy Test     Decline        None
1235     Sad Test       Decline        2022-03-24
1235     Sad Test       Decline        2022-03-04
1235     Sad Test       Decline        2022-03-04
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06

我不知道该怎么做。从我在网上搜索的内容来看,我没有找到任何与我的这个具体问题有关的东西,也没有找到任何可以回答我的问题的功能。
编辑:
我只想用"测试完成"中显示的第一个值填充"无"值。例如,在示例中,第一个值是ID为1234的"快乐测试",我想将"无"值填充为"快乐测试",ID为1235的"悲伤测试"也是如此。如果ID已经填充了"测试完成",则我们可以跳过它。希望这有意义。

zwghvu4y

zwghvu4y1#

将groupby与ffill()一起使用。

data = {'id': [1234, 1234, 1235, 1235, 1235, 1236, 1236, 1236],
        'test': ['Happy Test', 
                  None, 
                 'Sad Test', 
                  None, 
                  None, 
                 'Lonely Test', 
                 'Lonely Test', 
                 'Lonely Test']
       }

df = pd.DataFrame(data)

df['test'] = df.groupby('id')['test'].ffill()

输出:

id         test
0  1234   Happy Test
1  1234   Happy Test
2  1235     Sad Test
3  1235     Sad Test
4  1235     Sad Test
5  1236  Lonely Test
6  1236  Lonely Test
7  1236  Lonely Test

相关问题