提供以下数据:
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)
预期输出:
explode
timing
:df = df.explode('timing')
预期输出:
计时中的每个项目多排一行
explode
depth
:df = df.explode('depth')
输出不符合预期:
我希望
chisel
有6行,而disc
有8行每个3个,用于
10-apr
和10-nov
,用于chisel
每个4个,用于
10-apr
和10-nov
,用于disc
explode
的产量是预期的两倍chisel
为12,而不是6对于
disc
,从16代替8问题:
我的期望不正确吗?
我使用
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/