如何在数据框中添加新的计算列?

时间:2017-03-14 20:54:29

标签: python pandas

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

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

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

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函数从float列TodaysDate中减去日期时间列YOB并将值放入Age列?我想对数据框中的每一行执行此操作。

谢谢!

2 个答案:

答案 0 :(得分:5)

这个答案主要是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

答案 1 :(得分:3)

数据:

String

您不需要额外的列let constantString = "constant" var mutableString = "mutable" constantString = "oops" //Will not compile mutableString = "changed" //Totally fine, since this is a var - 您可以动态获取它:

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

或者,您可以使用DataFrame.eval()方法:

TodaysDate