首页 > 解决方案 > 根据满足条件查找两点之间的厚度

问题描述

我有一个包含表面和深度列表的数据框。一些表面标有后缀 _top 和 _base。

如何编写一个函数来创建一个列,该列仅计算与 _top 和 _base 后缀具有相同名称的表面的厚度(例如 red_top - red_base = 厚度)?

例子:

df = pd.DataFrame({'Surface': ['red_top', 'red_base',
                            'blue_top', 'blue_base', 'green_top', 'pink'],
                 'Depth':[2, 6, 12, 45, 55, 145]})

我试图拆分表面列,为表面创建一个,为顶部/底部创建一个,但我不确定这是否有必要,并且仍然坚持如何根据这些条件计算厚度。

非常感谢

标签: pythonpandas

解决方案


我首先将“表面”列分成两部分 - “颜色”和“级别”,然后按“颜色”旋转表格,然后计算厚度如下

split = df.Surface.str.split("_", expand=True)
split.columns = ["Color", "Level"]

df = pd.concat([df, split], axis=1)

df_pivoted = df.pivot(index="Color", columns="Level", values="Depth")
df_pivoted["Thinkness"] = df_pivoted.base - df_pivoted.top

您的示例的 df_pivoted 如下所示 -

Level   NaN     base    top Thinkness
Color               
blue    NaN     45.0    12.0    33.0
green   NaN     NaN     55.0    NaN
pink    145.0   NaN     NaN     NaN
red     NaN     6.0     2.0     4.0

NaN 列具有不带下标的 Surfaces 的非空值。

下面的行仅针对具有 _top 和 _base 的数据提供厚度计算,

thickness = (df_pivoted.base-df_pivoted.top).dropna()
print(thickness) 

结果是

Color
blue    33.0
red      4.0
dtype: float64

推荐阅读