【问题标题】:How can I add a new computed column in a dataframe? [duplicate]如何在数据框中添加新的计算列? [复制]
【发布时间】:2017-08-05 09:36:53
【问题描述】:

我正在尝试根据我拥有的数据计算一个人的年龄:

Data columns in 'Person' Dataframe:
TodaysDate   non-null datetime64[ns]
YOB          non-null float64

所以我想在该数据框中创建一个名为“年龄”的新列,到目前为止,我有以下代码:

Person['Age'] = map(sum, (Person.ix[0,'TodaysDate']).year, -(Person['YOB']))

TypeError: 'int' object is not iterable

我也试过了:

Person['Age'] = map((Person.ix[0,'TodaysDate']).year - Person['YOB'])

TypeError: map() must have at least two arguments.

我尝试了一些在其他问题上发布的不同方法,但似乎都没有奏效。这看起来很简单......但无法让它发挥作用。

任何想法如何使用 map 函数从浮点列 YOB 中减去日期时间列 TodaysDate 并将值放入 Age 列?我想对数据框中的每一行都这样做。

谢谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    数据:

    In [5]: df
    Out[5]:
        YOB
    0  1955
    1  1965
    2  1975
    3  1985
    

    您不需要额外的列 TodaysDate - 您可以动态获取它:

    In [6]: df['Age'] = pd.datetime.now().year - df.YOB
    
    In [7]: df
    Out[7]:
        YOB  Age
    0  1955   62
    1  1965   52
    2  1975   42
    3  1985   32
    

    您也可以使用DataFrame.eval() 方法:

    In [16]: df
    Out[16]:
        YOB
    0  1955
    1  1965
    2  1975
    3  1985
    
    In [17]: df.eval("Age = @pd.datetime.now().year - YOB", inplace=True)
    
    In [18]: df
    Out[18]:
        YOB  Age
    0  1955   62
    1  1965   52
    2  1975   42
    3  1985   32
    

    【讨论】:

      【解决方案2】:

      这个答案大多只是对assign的宣传。我是assign 的粉丝,因为它返回了一个新的pd.DataFrame,它是旧pd.DataFrame 的副本,其中包括了额外的列。在某些情况下,返回一个新的pd.DataFrame 更合适。感觉语法简洁直观。

      另外,请注意,我在计算方面添加了零值,因为我完全抄袭了@MaxU 的答案。

      df.assign(Age=pd.datetime.now().year - df.YOB)
      
          YOB  Age
      0  1955   62
      1  1965   52
      2  1975   42
      3  1985   32
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-11
        • 2016-10-17
        • 2020-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        相关资源
        最近更新 更多