【问题标题】:Mapping column value to another column based condition将列值映射到另一个基于列的条件
【发布时间】:2021-09-28 19:06:46
【问题描述】:

我有一个看起来像这样的熊猫数据框:

ID  Value   datum1  value1      datum2      value2      datum3      value3
111 -2.18   NAVD88  3.54601048  NGVD29      -4.13   Local Assumed Datum -0.93
111 -2.4    NAVD88  3.32601048  NGVD29      -3.91   Local Assumed Datum -1.15
111 -2.83   NAVD88  2.89601048  NGVD29      -3.48   Local Assumed Datum -1.58
111 -2.36   NAVD88  3.36601048  NGVD29      -3.95   Local Assumed Datum -1.11
111 -2.06   NAVD88  3.66601048  NGVD29      -4.25   Local Assumed Datum -0.81
111 -3.99   NAVD88  1.73601048  NGVD29      -2.32   Local Assumed Datum -2.74
111 -4.12   NAVD88  1.60601048  NGVD29      -2.19   Local Assumed Datum -2.87
111 -2.78   NAVD88  2.94601048  NGVD29      -3.53   Local Assumed Datum -1.53
111 -2.38   NAVD88  3.34601048  NGVD29      -3.93   Local Assumed Datum -1.13
111 -2.44   NAVD88  3.28601048  NGVD29      -3.87   Local Assumed Datum -1.19
967 -8.18   NAVD88  101.21  Local Assumed Datum -6.21   NAN         NAN
967 -9.8    NAVD88  99.59   Local Assumed Datum -7.83   NAN         NAN
967 -9.48   NAVD88  99.91   Local Assumed Datum -7.51   NAN         NAN
967 -9.22   NAVD88  100.17  Local Assumed Datum -7.25   NAN         NAN
967 -8.34   NAVD88  101.05  Local Assumed Datum -6.37   NAN         NAN
967 -8.8    NAVD88  100.59  Local Assumed Datum -6.83   NAN         NAN
967 -8.61   NAVD88  100.78  Local Assumed Datum -6.64   NAN         NAN
967 -8.13   NAVD88  101.26  Local Assumed Datum -6.16   NAN         NAN

其中 datum2 = "NGVD29" 列,我想映射来自 datum3 --> datum2 和 value3 -->value2 的值。

我试图获取的数据框如下所示:

ID  Value   datum1  value1      datum2      value2      datum3      value3
111 -2.18   NAVD88  3.54601048  Local Assumed Datum -0.93   Local Assumed Datum -0.93
111 -2.4    NAVD88  3.32601048  Local Assumed Datum -1.15   Local Assumed Datum -1.15
111 -2.83   NAVD88  2.89601048  Local Assumed Datum -1.58  Local Assumed Datum -1.58
111 -2.36   NAVD88  3.36601048  Local Assumed Datum -1.11   Local Assumed Datum -1.11
111 -2.06   NAVD88  3.66601048  Local Assumed Datum -0.81   Local Assumed Datum -0.81
111 -3.99   NAVD88  1.73601048  Local Assumed Datum -2.74  Local Assumed Datum -2.74
111 -4.12   NAVD88  1.60601048  Local Assumed Datum -2.87   Local Assumed Datum -2.87
111 -2.78   NAVD88  2.94601048  Local Assumed Datum -1.53   Local Assumed Datum -1.53
111 -2.38   NAVD88  3.34601048  Local Assumed Datum -1.13   Local Assumed Datum -1.13
111 -2.44   NAVD88  3.28601048  Local Assumed Datum -1.19   Local Assumed Datum -1.19
967 -8.18   NAVD88  101.21      Local Assumed Datum -6.21   NAN         NAN
967 -9.8    NAVD88  99.59       Local Assumed Datum -7.83   NAN         NAN
967 -9.48   NAVD88  99.91       Local Assumed Datum -7.51   NAN         NAN
967 -9.22   NAVD88  100.17      Local Assumed Datum -7.25   NAN         NAN
967 -8.34   NAVD88  101.05      Local Assumed Datum -6.37   NAN         NAN
967 -8.8    NAVD88  100.59      Local Assumed Datum -6.83   NAN         NAN
967 -8.61   NAVD88  100.78      Local Assumed Datum -6.64   NAN         NAN
967 -8.13   NAVD88  101.26      Local Assumed Datum -6.16   NAN         NAN

之后我可以删除 datum3 和 value3 列。使用线路:

df['value2']=df['value3'][df['datum2']=='NGVD29'] 

半实现这一点,但删除了 datum2 = "Local Assumed Datum" 的值。

【问题讨论】:

    标签: python-3.x pandas dataframe numpy


    【解决方案1】:

    IIUC,你可以试试:

    m = df['Datum2'].eq('NGVD29')
    df.loc[m, ['Datum2', 'value2']] = df[m][['Datum3', 'value3']].values
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多