根据满足条件找到两点之间的厚度

时间:2019-10-03 20:37:39

标签: python pandas

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

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

示例:

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

我曾尝试将Surface列拆分为一个表面,为顶部/底部创建一个,但是我不确定是否有必要,仍然停留在如何根据满足这些条件来计算厚度的问题上条件。

非常感谢

1 个答案:

答案 0 :(得分:1)

我首先将“表面”(Surface)列分为两部分-“颜色”和“色阶”,然后按“颜色”旋转表格,然后按以下方式计算厚度

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”列具有不带下标的Surface的非空值。

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

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

结果

Color
blue    33.0
red      4.0
dtype: float64