首页 > 解决方案 > 我们可以在 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

标签: pythonpython-3.xpandasdataframe

解决方案


使用DataFrame.stackafter Series.str.split,然后通过第一次和第二次删除 MultiIndex 的最后一级Series.reset_index转换SeriesDataFrame

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

推荐阅读