如何在数据框架中添加一个新计算的列



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

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.

我尝试了一些在其他问题上发布的不同方法,但似乎没有任何方法可以。这似乎很简单...但是无法使它起作用。

有什么想法我如何使用地图函数从float列YOB减去DateTime列TodaysDate并将值放入Age列中?我想为数据框中的每一行执行此操作。

谢谢!

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

数据:

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

相关内容

最新更新