pandas 按组查找第一个值,并在找到值后为组中的所有行创建包含该值的列

ujv3wf0j  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(104)

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

data = {'Name': ['Tom', 'Tom', 'Tom', 'Tom'],
    'Sequence': [2021, 2022, 2023, 2024],
    'Car': ['Ford', 'Chevy', 'Tesla', NaN]}

我想创建一个名为“new_car”的新列,它查找“Chevy”的第一个值,并将其复制到组的其余部分。
因此,如果我按“Name”分组,找到Car = 'Chevy'的第一个示例,列的其余部分被列为' Chevy'。
下面是新列的显示方式:'new_car':[NaN,' Chevy','Chevy','Chevy']
不知道如何在Pandas中实现这一点...有帮助吗?

zf9nrax1

zf9nrax11#

你可以用where屏蔽非Chevy值,然后用ffill

df['new_car'] = df['Car'].where(df['Car'].eq('Chevy')).ffill()

或者,您也可以ffill每组:

df['new_car'] = (df['Car'].where(df['Car'].eq('Chevy'))
                 .groupby(df['Name']).ffill()
                )

输出:

Name  Sequence    Car new_car
0  Tom      2021   Ford     NaN
1  Tom      2022  Chevy   Chevy
2  Tom      2023  Tesla   Chevy
3  Tom      2024    NaN   Chevy

相关问题