首页 > 解决方案 > 拉出分类行并应用于所有后续行,直到找到新类别

问题描述

这是我的数据的虚拟 DataFrame,我有分类行(由存在的NaN值表示'Price')和数据行(由非NaN 值表示'Price')。

gear = [('Baseball', None), ('Bat', 1), ('Glove', 2), ('Soccer', None), ('Shoes', 3), ('Ball', 4), ('Football', None), ('Helmet', 6)]
dummy_df = pd.DataFrame(gear, columns=['Name', 'Price'])

       Name  Price
0  Baseball    NaN
1       Bat    1.0
2     Glove    2.0
3    Soccer    NaN
4     Shoes    3.0
5      Ball    4.0
6  Football    NaN
7    Helmet    6.0

我想创建一个新列'Sport',该列应用于课程类别下的每一行,直到您进行下一项运动。删除了分类行后,生成的 DataFrame 将如下所示:

       Name  Price     Sport
1       Bat    1.0  Baseball
2     Glove    2.0  Baseball
3     Shoes    3.0    Soccer
4      Ball    4.0    Soccer
5    Helmet    6.0  Football

我正在考虑创建一个新列'Sport',它是Nameif Priceis not NaNelse的值NaN。然后使用 affill或其他东西,然后删除NaN价格行?

标签: pythonpandasdataframe

解决方案


尝试mask,notna然后ffill得到正确的Sport

s = dummy_df['Price'].notna()
dummy_df.assign(Sport=dummy_df['Name'].mask(s).ffill()).loc[s]

输出:

     Name  Price     Sport
1     Bat    1.0  Baseball
2   Glove    2.0  Baseball
4   Shoes    3.0    Soccer
5    Ball    4.0    Soccer
7  Helmet    6.0  Football

推荐阅读