python - 编写函数以创建新的 pandas 列时出错
问题描述
我有一个数据框
id |start|stop|join_date
233| 0 | 12 |2015-01-01
234| 0 | 12 |2013-03-04
235| 10 | 23 |2014-01-10
目标:
我想创建另一列,根据日期是否为 0stop_date
来偏移。join_date
start
如果start
是 0 那么 stop_date
是join_date
被月份抵消stop
如果start
不是 0,那么 stop_date
是被 in的月份和 in 的join_date
月份所抵消stop
start
我写了以下函数:
def stop_date(x):
if x['start'] == 0:
return x['join_date'] + x['stop'].astype('timedelta64[M]')
elif x['start'] != 0 :
return x['join_date'] + x['start'].astype('timedelta64[M]') + x['stop'].astype('timedelta64[M]')
else:
return x
我试图通过以下方式应用于数据框:
df['stop_date'] = df.apply(stop_date, axis = 1)
我不断收到错误消息:AttributeError: ("'int' object has no attribute 'astype'", 'occured at index 0') 我不知道如何实现这一点。
解决方案
因为当 start 为 0 时,将 start 和 stop 相加不会改变要添加的月份数,您可以sum
同时转换astype
并添加“join_date”:
df['stop_date'] = (pd.to_datetime(df['join_date'])
+ df[['start', 'stop']].sum(axis=1).astype('timedelta64[M]')
).dt.date
print (df)
id start stop join_date stop_date
0 233 0 12 2015-01-01 2016-01-01
1 234 0 12 2013-03-04 2014-03-04
2 235 10 23 2014-01-10 2016-10-10
推荐阅读
- javascript - 如何在javascript中设置通用链接?
- ios - 如何抑制“NSKeyedUnarchiveFromData”不应用于取消归档,并将在未来版本中从 Xcode 控制台中删除
- spring-boot - 如何限制tomcat中spring boot应用程序的内存使用?
- python - 仅从数据框中的列中识别数值 - Python
- mysql - MySQL选择子查询中的位置仅显示1条数据
- jekyll - 使用 GitHub Pages 的 Jekyll 站点无法在本地运行
- dpdk - 通过 packetgen dpdk 发送 pcap 文件
- sql - 如何使用正则表达式在雪花数据库中生成 short_link 列
- c++ - 窗口标题C ++如何获取随机标题的名称
- node.js - 连接池永远不会用 node-oracledb 和 nodejs 关闭