python - 我们可以在 pandas 中的 explode() 替代选项中使用什么?
问题描述
我正在尝试运行python脚本,其中我使用explode()将行拆分为多行,但条件是我们可以在更高版本的pandas中使用explode()意味着pandas版本应该大于或等于'0.25.0'
所以在更高版本的熊猫中,explode() 工作正常。我使用了以下代码:
columns = ['rule_id', 'applied_sql_function1', 'input_condition', 'input_value', 'and_or_not_oprtor', 'output_condition', 'priority_order','comb_fld_order']
df_main1 = (df_main1.set_index(['rule_id', 'applied_sql_function1', 'input_condition', 'input_value', 'and_or_not_oprtor', 'output_condition', 'priority_order']).apply(lambda x: x.astype(str).str.split(',').explode()).reset_index())
我正在拆分comb_fld_order
列。
我需要一些替代解决方案,以便新逻辑可以在较低版本的熊猫中给出与explode() 相同的结果。有人可以帮我怎么做吗?
df1:
rule_id priority_order comb_fld_order
R162 2.3 1
R162 2.3.1 1
R162 2.6 2
R162 2.6.1 2
R162 3.0.4 3.2,3.1,3
预期输出:
df1:
rule_id priority_order comb_fld_order
R162 2.3 1
R162 2.3.1 1
R162 2.6 2
R162 2.6.1 2
R162 3.0.4 3.2
R162 3.0.4 3.1
R162 3.0.4 3
解决方案
使用DataFrame.stack
after Series.str.split
,然后通过第一次和第二次删除 MultiIndex 的最后一级Series.reset_index
转换Series
为DataFrame
:
df_main1 = (df_main1.set_index(['rule_id','priority_order'])['comb_fld_order']
.astype(str)
.str.split(',', expand=True)
.stack()
.reset_index(level=-1, drop=True)
.reset_index(name='comb_fld_order')
)
print (df_main1)
rule_id priority_order comb_fld_order
0 R162 2.3 1
1 R162 2.3.1 1
2 R162 2.6 2
3 R162 2.6.1 2
4 R162 3.0.4 3.2
5 R162 3.0.4 3.1
6 R162 3.0.4 3
推荐阅读
- pandas - 从不同列的断点获取行数
- security - WSO2 APIM 如何限制用户仅在沙箱中执行
- angular - 如何以角度将默认类设置为*ngFor的第一个元素
- php - 如何在后台 laravel 中运行推送通知循环?
- jax-rs - 在 jax-rs 中提取请求参数期间出现错误请求错误 (400) 或未找到错误 (404)
- firebase - React Native:对象不是函数
- c# - 在 UWP GridView 中隐藏项目周围的边框
- sonarqube - 无法在 Windows 上安装 sonarqube 7.1
- mongodb - MongoDB中的复杂搜索
- node.js - Sequelize - 一个模型涉及多个表