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

MB4*_*B41 5 python pandas

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

Data columns in 'Person' Dataframe:
TodaysDate   non-null datetime64[ns]
YOB          non-null float64
Run Code Online (Sandbox Code Playgroud)

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

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

TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

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

TypeError: map() must have at least two arguments.
Run Code Online (Sandbox Code Playgroud)

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

有什么想法我如何使用map函数TodaysDate从float列中减去datetime列YOB并将值放入Age列中?我想对数据帧中的每一行执行此操作.

谢谢!

piR*_*red 7

这个答案大多只是宣传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
Run Code Online (Sandbox Code Playgroud)


Max*_*axU 5

数据:

In [5]: df
Out[5]:
    YOB
0  1955
1  1965
2  1975
3  1985
Run Code Online (Sandbox Code Playgroud)

您不需要额外的列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
Run Code Online (Sandbox Code Playgroud)

另外,您可以使用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
Run Code Online (Sandbox Code Playgroud)