我有一个带有表面和深度列表的数据框。一些表面标记有后缀_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/

10-12 23:06