提供以下数据:

data = {'type': ['chisel', 'disc', 'user_defined'],
        'depth': [[152, 178, 203],  [127, 152, 178, 203], [0]],
        'residue': [[0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0], [0.0]],
        'timing': [["10-nov", "10-apr"], ["10-nov", "10-apr"], ["10-apr"]]}


创建df

import pandas as pd

df = pd.DataFrame(data)


预期输出:

python - pandas.DataFrame.explode产生太多行-LMLPHP

explode timing

df = df.explode('timing')


预期输出:


计时中的每个项目多排一行


python - pandas.DataFrame.explode产生太多行-LMLPHP

explode depth

df = df.explode('depth')


输出不符合预期:


我希望chisel有6行,而disc有8行


每个3个,用于10-apr10-nov,用于chisel
每个4个,用于10-apr10-nov,用于disc

explode的产量是预期的两倍


chisel为12,而不是6
对于disc,从16代替8



python - pandas.DataFrame.explode产生太多行-LMLPHP

问题:


我的期望不正确吗?
我使用explode的方式不正确吗?

最佳答案

每当使用重复索引时,pandas都会产生意外结果。请注意,在第一个explode之后,您最终将拥有重复的索引。

重置它们将产生一个预期的数据框。

用修复

df.explode('timing').reset_index(drop=True).explode('depth')




           type depth                              residue  timing
0        chisel   152  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-nov
0        chisel   178  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-nov
0        chisel   203  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-nov
1        chisel   152  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-apr
1        chisel   178  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-apr
1        chisel   203  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-apr
2          disc   127  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-nov
2          disc   152  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-nov
2          disc   178  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-nov
2          disc   203  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-nov
3          disc   127  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-apr
3          disc   152  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-apr
3          disc   178  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-apr
3          disc   203  [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]  10-apr
4  user_defined     0                                [0.0]  10-apr

关于python - pandas.DataFrame.explode产生太多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57666350/

10-12 23:31