【问题标题】:How to remove characters from floats?如何从浮点数中删除字符?
【发布时间】:2016-02-17 14:55:27
【问题描述】:

我目前有一个如下所示的数据框:

   Idnumber    Ownership    Date
    1            100        2006
    2            >50        2006 
    1            80         2007
    3            NaN        2006

所有权列当前是浮点类型。我想要的是在 idnumber 上创建一个 groupby 函数,该函数返回每个 Idnumber 的最大值。 问题是其中的 > = str())。

  df['Ownership'] = df['Ownership'].astype(str)
  df['Ownership'] = df['Ownership'].map(lambda x: x.strip('± = > + <'))
  df['Ownership'] = df['Ownership'].astype(float).fillna(0.0)
  df['Ownershipadjusted']= df['Ownership'].groupby([df['Idnumber'],df['Ownership']]).max()

实际上不起作用,因为将其转换回浮点数会产生错误:无法将字符串转换为浮点数。

         df['Ownership'] = df['Ownership'].apply(pd.to_numeric, errors='coerce')

也没有所需的效果。 有没有更直接的方法可以从浮点数中删除符号,或者使这种转换工作?

为避免混淆,这是我需要的:

 Idnumber    Ownership    Date      Ownership adjusted
    1            100       2006      100
    2            50        2006       50
    1            80        2007      100
    3            0         2006        0

当然,数据框包含的观察结果远不止 4 个

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    dtype 转换为str,然后将extract 转换为数字并将dtype 转换回float

    In [215]:
    df['Ownership'] = df['Ownership'].astype(str).str.extract('(\d+)').astype(float)
    df
    
    Out[215]:
       Idnumber  Ownership  Date
    0         1        100  2006
    1         2         50  2006
    2         1         80  2007
    3         3        NaN  2006
    

    另外你的groupby 声明是错误的,你需要这个:

    In [218]:
    df['Ownershipadjusted']= df.groupby(['Idnumber'])['Ownership'].transform('max')
    df
    
    Out[218]:
       Idnumber  Ownership  Date  Ownershipadjusted
    0         1        100  2006                100
    1         2         50  2006                 50
    2         1         80  2007                100
    3         3        NaN  2006                NaN
    

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 2017-09-18
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多