我有一个带有表面和深度列表的数据框。一些表面标记有后缀_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”列划分为两个部分-“ color”和“ level”,然后按“ color”旋转表格,然后按以下方式计算厚度
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
关于python - 根据满足条件找到两点之间的厚度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58226557/