Pandas 计算两个整数列之间的年龄
我有以下建议:Pandas 计算两个整数列之间的年龄,pandas,dataframe,numpy,datetime,Pandas,Dataframe,Numpy,Datetime,我有以下建议: OnlineDate BDate 20190813 19720116 20190809 19570912 20190807 19600601 20190801 19760919 20190816 19530916 这两列是整数,日期为YYYYMMDD 我正在尝试得到一个新的专栏,它是这两个日期之间几年的结果 因此,预期的输出是下一个 OnlineDate BDate NewColumn 20190813
OnlineDate BDate
20190813 19720116
20190809 19570912
20190807 19600601
20190801 19760919
20190816 19530916
这两列是整数,日期为YYYYMMDD
我正在尝试得到一个新的专栏,它是这两个日期之间几年的结果
因此,预期的输出是下一个
OnlineDate BDate NewColumn
20190813 19720116 47
20190809 19570912 61
20190807 19600601 59
20190801 19760919 51
20190816 19530916 66
我不能只减去年份,因为天数和月份决定年份
我必须创建一个函数来完成它吗?或者我可以不用函数来完成它吗?这需要一些设置,但您需要将列转换为日期时间,从中获取年份,然后简单地减去它们以获得差异
import pandas as pd
import numpy as np
# setup
onlinedate = [20190813, 20190809, 20190807, 20190801, 20190816]
bdate = [19720116, 19570912, 19600601, 19760919, 19530916]
df = pd.DataFrame({"onlinedate":onlinedate, "bdate":bdate})
# convert to dates
onlinedate_year = pd.to_datetime(df["onlinedate"], format="%Y%M%d")
bdate_year = pd.to_datetime(df["bdate"], format="%Y%M%d")
# Setup new column, columnwise operation
# Subtract the two dates and divide by years
df["NewColumn"] = ((onlinedate_year - bdate_year)/np.timedelta64(1,'Y'))
# convert the float column in to int
df["NewColumn"] = df["NewColumn"].astype(int)
print(df)
输出:
onlinedate bdate NewColumn
0 20190813 19720116 46
1 20190809 19570912 61
2 20190807 19600601 59
3 20190801 19760919 42
4 20190816 19530916 65
它需要一些设置,但您希望将列转换为日期时间,从中获取年份,然后简单地减去它们以获得差异
import pandas as pd
import numpy as np
# setup
onlinedate = [20190813, 20190809, 20190807, 20190801, 20190816]
bdate = [19720116, 19570912, 19600601, 19760919, 19530916]
df = pd.DataFrame({"onlinedate":onlinedate, "bdate":bdate})
# convert to dates
onlinedate_year = pd.to_datetime(df["onlinedate"], format="%Y%M%d")
bdate_year = pd.to_datetime(df["bdate"], format="%Y%M%d")
# Setup new column, columnwise operation
# Subtract the two dates and divide by years
df["NewColumn"] = ((onlinedate_year - bdate_year)/np.timedelta64(1,'Y'))
# convert the float column in to int
df["NewColumn"] = df["NewColumn"].astype(int)
print(df)
输出:
onlinedate bdate NewColumn
0 20190813 19720116 46
1 20190809 19570912 61
2 20190807 19600601 59
3 20190801 19760919 42
4 20190816 19530916 65
将数据类型转换为日期时间
for col in ['OnlineDate','BDate']:
df[col]=pd.to_datetime(df[col],format="%Y%m%d")
减去年份
df['NewColumn']=df['OnlineDate'].dt.year-df['BDate'].dt.year
将数据类型转换为日期时间
for col in ['OnlineDate','BDate']:
df[col]=pd.to_datetime(df[col],format="%Y%m%d")
减去年份
df['NewColumn']=df['OnlineDate'].dt.year-df['BDate'].dt.year
但是如果你在输出中取第一个原始值,结果是错误的,它必须是46,而不是47,这就是为什么我必须花上一个月和一天的时间来创建新的column@Jozamvg我误解了你的要求,请看更新。但是如果你在输出中取第一个原始值,结果是错误的,它一定是46而不是47,这就是为什么我要花上一个月和一天的时间来创建新的column@Jozamvg我误解了你的要求,请看更新。