【问题标题】:Python: Conditional SubstractionPython:条件减法
【发布时间】:2020-12-26 17:20:25
【问题描述】:

我的目标是根据每一层的深度 [m] 计算每个 id 的每一层的厚度 [m]。下面是一个和我类似的数据框。

eID = [1,1,1,2,2,3,3,3,3]
depth = [0.35,1.5,3.0,0.75,2.0,0.2,0.8,1.7,3.5]
dictex ={"id":eID,"depth [m]":depth}
dfe = pd.DataFrame(dictex)
print(dfe)

   id  depth [m]
0   1       0.35
1   1       1.50
2   1       3.00
3   2       0.75
4   2       2.00
5   3       0.20
6   3       0.80
7   3       1.70
8   3       3.50

有两个条件需要考虑:

  1. 如果 id 没有更小深度的层,则该深度等于厚度。
  2. 如果存在深度较小的层,则必须从当前深度中减去之前的深度来计算厚度。

结果应该是这样的:

   id  depth [m]  thickness [m]
0   1       0.35           0.35
1   1       1.50           1.15
2   1       3.00           1.50
3   2       0.75           0.75
4   2       2.00           1.25
5   3       0.20           0.20
6   3       0.80           0.60
7   3       1.70           0.90
8   3       3.50           1.80

我尝试过使用“groupby”、“np.where”和带有 if 条件的 for 循环,但不幸的是我无法让它工作。

任何帮助将不胜感激!

【问题讨论】:

  • 你能分享一下你目前尝试过的代码吗?

标签: python pandas conditional-statements


【解决方案1】:

如果值按组排序,则使用 DataFrameGroupBy.diff 将每个组的第一个值替换为 Series.fillna 原始值:

dfe['thickness [m]s'] = dfe.groupby('id')['depth [m]'].diff().fillna(dfe['depth [m]'])
print (dfe)
   id  depth [m]  thickness [m]s
0   1       0.35            0.35
1   1       1.50            1.15
2   1       3.00            1.50
3   2       0.75            0.75
4   2       2.00            1.25
5   3       0.20            0.20
6   3       0.80            0.60
7   3       1.70            0.90
8   3       3.50            1.80

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2013-11-27
    相关资源
    最近更新 更多