Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 计算两个整数列之间的年龄_Pandas_Dataframe_Numpy_Datetime - Fatal编程技术网

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我误解了你的要求,请看更新。