首页 > 解决方案 > 计算熊猫列条目中给出的间隔的平均值

问题描述

我有一列在某些单元格中有深度间隔:

该列看起来像这样

    depth
0   0
1   1
2   2
3   0_1
4   1_2

我想知道是否有代码可以用来查找 Pandas 中间隔的单元格的平均值。数据框非常大,手动操作不是明智之举。

非常感谢你的帮助。

标签: pythonpandasdataframe

解决方案


方法一:

使用拆分depth列并Series.str.split从此拆分列创建一个新数据框,dtype=float并附带:meanaxis=1

df['depth'] = pd.DataFrame([*df['depth'].str.split('_')], dtype='float').mean(1)

方法二:

Series.str.split使用with 可选参数展开列expand=Truemean附带axis=1

df['depth'] =  df['depth'].str.split('_', expand=True).astype(float).mean(1)

方法三:

遍历depth列表理解中的每个元素并获取mean

df['depth'] = [np.array(s.split('_'), dtype='float').mean() for s in df['depth']]

print(df)
   depth
0    0.0
1    1.0
2    2.0
3    0.5
4    1.5

时间:

df.shape
(50000, 1)

%%timeit @Method1
_ = pd.DataFrame([*df['depth'].str.split('_')], dtype='float').mean(1)
55 ms ± 1.25 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
   
%%timeit @Method2
_  =  df['depth'].str.split('_', expand=True).astype(float).mean(1)
101 ms ± 824 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%timeit @Method3
_ = [np.array(s.split('_'), dtype='float').mean() for s in df['depth']]
690 ms ± 12.7 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

推荐阅读