我有一个带有表面和深度列表的数据框。一些表面标记有后缀_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列拆分为一个表面,为顶部/底部创建一个,但是我不确定是否有必要,仍然停留在如何根据满足这些条件来计算厚度的问题上条件。
非常感谢
答案 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