【问题标题】:How to create new column in dataframe based on condition from other dataframe?如何根据其他数据框中的条件在数据框中创建新列?
【发布时间】:2022-01-19 19:54:19
【问题描述】:
df1 = pd.DataFrame({"DEPTH":[0.5, 1, 1.5, 2, 2.5],
                     "POROSITY":[10, 22, 15, 30, 20],
                     "WELL":"well 1"})

df2 = pd.DataFrame({"Well":"well 1",
                    "Marker":["Fm 1","Fm 2"],
                    "Depth":[0.7, 1.7]})

大家好。我有两个数据框,我想在 df1 上创建一个新列,例如:df1["FORMATIONS"],其中包含基于 df2["Depth"] 和 df1[ 深度限制的 df2["Marker"] 值的信息“深度”]。

因此,例如,如果 df2["Depth"] = 1.7,则 df1["DEPTH"] > 1.7 的 df1 中的所有样本都应在此新列 df1["FORMATIONS"] 中标记为“Fm 2” .

最终的数据帧 df1 应该如下所示:

DEPTH   POROSITY   WELL   FORMATIONS
0.5     10        well 1     nan
1       22        well 1     Fm 1
1.5     15        well 1     Fm 1
2       30        well 1     Fm 2
2.5     20        well 1     Fm 2

谁能帮帮我?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您在这里所做的是将连续数据转换为分类数据。使用pandas 有很多方法可以做到这一点,但其中一种更广为人知的方法是使用pandas.cut

    指定bins参数时,需要在列表末尾添加float(inf),表示最后一个bin到无穷大。

    df1["FORMATIONS"] = pd.cut(df1.DEPTH, list(df2.Depth) + [float('inf')], labels=df2.Marker)
    

    df1 现在将是:

    【讨论】:

      【解决方案2】:

      使用pandas.merge_asof:

      注意。用于合并的列需要先排序

      pd.merge_asof(df1,
                    df2[['Marker', 'Depth']].rename(columns={'Marker': 'Formations'}),
                    left_on='DEPTH', right_on='Depth')
      

      输出:

         DEPTH  POROSITY    WELL Formations  Depth
      0    0.5        10  well 1        NaN    NaN
      1    1.0        22  well 1       Fm 1    0.7
      2    1.5        15  well 1       Fm 1    0.7
      3    2.0        30  well 1       Fm 2    1.7
      4    2.5        20  well 1       Fm 2    1.7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多