python - 根据满足条件查找两点之间的厚度
问题描述
我有一个包含表面和深度列表的数据框。一些表面标有后缀 _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]})
我试图拆分表面列,为表面创建一个,为顶部/底部创建一个,但我不确定这是否有必要,并且仍然坚持如何根据这些条件计算厚度。
非常感谢
解决方案
我首先将“表面”列分成两部分 - “颜色”和“级别”,然后按“颜色”旋转表格,然后计算厚度如下
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
推荐阅读
- angular - 组件调用多个 API 时只调用一次拦截器
- angular - 如何仅在 *ngFor 完成加载后调用函数?
- sql - sql 获取全面计数
- google-cloud-platform - gcloud sdk 无法通过 gs 链接找到文件
- android - 没有主构造函数,超类型初始化是不可能的
- php - 当我发送 POST 时,API 正在接收 GET 请求?
- javascript - 如何在某个日期之间从 mongoDB 获取数据(日期在我们的文档中存储为 createdOn)?
- javascript - 如何在 JavaScript 中对 HTML 画布进行填充?
- android - 使用不同的构建变体时 skuDetailsList 为空
- php - Laravel POST 请求给了我一个 404