How can I add a new computed column in a dataframe?
本问题已经有最佳答案,请猛点这里访问。
我试图根据我掌握的数据来计算一个人的年龄:
1 2 3 | Data columns in 'Person' Dataframe: TodaysDate non-null datetime64[ns] YOB non-null float64 |
因此,我想在这个数据框架内创建一个名为"Age"的新列,到目前为止,我有以下代码:
1 2 3 | Person['Age'] = map(sum, (Person.ix[0,'TodaysDate']).year, -(Person['YOB'])) TypeError: 'int' object is not iterable |
我也尝试过:
1 2 3 | Person['Age'] = map((Person.ix[0,'TodaysDate']).year - Person['YOB']) TypeError: map() must have at least two arguments. |
我试过其他问题上发布的几种不同方法,但似乎没有一种有效。这看起来很简单……但不能让它工作。
我可以用map函数将datetime列
谢谢您!
这个答案主要是对
另外,请注意,我已经在计算中添加了零值,因为我已经完全删除了@maxu的答案。
1 2 3 4 5 6 7 | df.assign(Age=pd.datetime.now().year - df.YOB) YOB Age 0 1955 62 1 1965 52 2 1975 42 3 1985 32 |
数据:
1 2 3 4 5 6 7 | In [5]: df Out[5]: YOB 0 1955 1 1965 2 1975 3 1985 |
您不需要额外的列
1 2 3 4 5 6 7 8 9 | 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()方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 |