Python 年数
Count of Year in Python
如何从某个日期和自人们开设帐户 (CRDACCT_DTE_OPEN) 以来的某个日期找到 python 中的年数?特定日期 (MIS_DATE) 是 2021-03-01,格式 = '%Y%m%d'
.
下面给出的数据集:
import pandas as pd
df = pd.DataFrame(
{ "MIS_DATE": ["2018-03-02", "2020-03-26", "2019-08-17", "2019-08-17", "2019-08-19"],
"CRDACCT_DTE_OPEN": ["2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31"]})
格式化日期:
df['CRDACCT_DTE_OPEN'] = pd.to_datetime(df['CRDACCT_DTE_OPEN'], format='%Y%m%d')
df['MIS_DATE'] = pd.to_datetime(df['MIS_DATE'], format='%d%m%Y')
我试过做这个手术。假设 MOB 是 MIS_DATE - CRDACCT_DTE_OPEN 的减法,但结果不是我所期望的。 我想要年份格式的输出,例如,如果某人在 2018-03-31 开设了帐户,则 MOB 为 3。 表示该人开设帐户后 3 年.
MOB = df['MIS_DATE'] - df['CRDACCT_DTE_OPEN']
MOB
输出:
1 370 days
2 592 days
3 592 days
4 590 days
...
Name: MOB, Length: 5, dtype: timedelta64[ns]
这就是你需要的。
df['col_of_datetime'].dt.year
这是例子
import pandas as pd
df = pd.DataFrame(
{"MIS_DATE": ["2018-03-02", "2020-03-26", "2019-08-17", "2019-08-17", "2019-08-19"],
"CRDACCT_DTE_OPEN": ["2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31"]})
df['CRDACCT_DTE_OPEN'] = pd.to_datetime(df['CRDACCT_DTE_OPEN'], format='%Y-%m-%d')
df['MIS_DATE'] = pd.to_datetime(df['MIS_DATE'], format='%Y-%m-%d')
target_year = 2021
result = target_year - df['MIS_DATE'].dt.year
print(result)
输出:
0 3
1 1
2 2
3 2
4 2
Name: MIS_DATE, dtype: int64
请试试这个:这里我们使用 Pandas
中的 date_range
函数
for x in range(len(df)):
print(len(pd.date_range(start=pd.to_datetime(df.iloc[x][0]),end=pd.to_datetime(df.iloc[x][1]),freq='Y')))
3
1
2
2
2
您可以更改 freq ='M'
个月
你可以使用 numpy 的
timedelta()
import numpy
(MOB/numpy.timedelta64(1, 'Y')).round()
0 3.0
1 1.0
2 2.0
3 2.0
4 2.0
dtype: float64
如何从某个日期和自人们开设帐户 (CRDACCT_DTE_OPEN) 以来的某个日期找到 python 中的年数?特定日期 (MIS_DATE) 是 2021-03-01,格式 = '%Y%m%d'
.
下面给出的数据集:
import pandas as pd
df = pd.DataFrame(
{ "MIS_DATE": ["2018-03-02", "2020-03-26", "2019-08-17", "2019-08-17", "2019-08-19"],
"CRDACCT_DTE_OPEN": ["2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31"]})
格式化日期:
df['CRDACCT_DTE_OPEN'] = pd.to_datetime(df['CRDACCT_DTE_OPEN'], format='%Y%m%d')
df['MIS_DATE'] = pd.to_datetime(df['MIS_DATE'], format='%d%m%Y')
我试过做这个手术。假设 MOB 是 MIS_DATE - CRDACCT_DTE_OPEN 的减法,但结果不是我所期望的。 我想要年份格式的输出,例如,如果某人在 2018-03-31 开设了帐户,则 MOB 为 3。 表示该人开设帐户后 3 年.
MOB = df['MIS_DATE'] - df['CRDACCT_DTE_OPEN']
MOB
输出:
1 370 days
2 592 days
3 592 days
4 590 days
...
Name: MOB, Length: 5, dtype: timedelta64[ns]
这就是你需要的。
df['col_of_datetime'].dt.year
这是例子
import pandas as pd
df = pd.DataFrame(
{"MIS_DATE": ["2018-03-02", "2020-03-26", "2019-08-17", "2019-08-17", "2019-08-19"],
"CRDACCT_DTE_OPEN": ["2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31", "2021-03-31"]})
df['CRDACCT_DTE_OPEN'] = pd.to_datetime(df['CRDACCT_DTE_OPEN'], format='%Y-%m-%d')
df['MIS_DATE'] = pd.to_datetime(df['MIS_DATE'], format='%Y-%m-%d')
target_year = 2021
result = target_year - df['MIS_DATE'].dt.year
print(result)
输出:
0 3
1 1
2 2
3 2
4 2
Name: MIS_DATE, dtype: int64
请试试这个:这里我们使用 Pandas
中的date_range
函数
for x in range(len(df)):
print(len(pd.date_range(start=pd.to_datetime(df.iloc[x][0]),end=pd.to_datetime(df.iloc[x][1]),freq='Y')))
3
1
2
2
2
您可以更改 freq ='M'
个月
你可以使用 numpy 的
timedelta()
import numpy
(MOB/numpy.timedelta64(1, 'Y')).round()
0 3.0
1 1.0
2 2.0
3 2.0
4 2.0
dtype: float64