python - 拉出分类行并应用于所有后续行,直到找到新类别
问题描述
这是我的数据的虚拟 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'
,它是Name
if Price
is not NaN
else的值NaN
。然后使用 affill
或其他东西,然后删除NaN
价格行?
解决方案
尝试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
推荐阅读
- reactjs - 如何获取对依赖于输入参数的 DOM 元素的引用?
- c - 当您可以按值执行时,为什么要通过引用来处理结构字段?
- c# - 从特定行读取 CSV 文件
- compilation - 将 CIL 代码反编译为一些高级代码 - 在数据流分析期间是否需要引入新变量?
- r - 如何通过查看特定元素来缩小矩阵
- wso2 - 如何在 MVC 应用程序中设置 SSO 登录到 wso2 身份服务器
- docker - Docker Windows 与虚拟机 Ubuntu Docker
- .net - 无法从 Powershell 中的函数返回 [System.Data.DataTable] 5/6/7
- angularjs - 如何使用 webpack 将库添加到 angularjs 应用程序?
- sql - 活动记录的反向合并