gpt4 book ai didi

python - 切片、合并会计年度日期并将其映射到日历年日期到新列

转载 作者:太空宇宙 更新时间:2023-11-03 21:45:19 26 4
gpt4 key购买 nike

我有以下 pandas 数据框:

Shortcut_Dimension_4_Code     Stage_Code
10225003 2
8225003 1
8225004 3
8225005 4

它是一个更大的数据集的一部分,我需要能够按月和年进行过滤。对于 Shortcut_Dimension_4_Code 列中大于 9999999 的值,我需要从前两位数字中提取会计年度;对于小于或等于 9999999 的值,我需要从第一位数字中提取会计年度。需要将该值添加到“20”以生成年份,即“20”+“8”= 2008 | “20”+“10”= 2010 年。

该年份“2008、2010”需要与阶段代码值(1-12)组合以生成月份/年份,即 02/2010。

然后需要将日期 02/2010 从会计年度日期转换为日历年度日期,即会计年度日期:02/2010 = 日历年度日期:08/2009。生成的日期需要显示在新列中。生成的 df 最终看起来像这样:

Shortcut_Dimension_4_Code     Stage_Code     Date
10225003 2 08/2009
8225003 1 07/2007
8225004 3 09/2007
8225005 4 10/2007

我是 pandas 和 python 的新手,需要一些帮助。我从这个开始:

Shortcut_Dimension_4_Code   Stage_Code  CY_Month    Fiscal_Year
0 10225003 2 8.0 10
1 8225003 1 7.0 82
2 8225003 1 7.0 82
3 8225003 1 7.0 82
4 8225003 1 7.0 82

我使用 .map 和 .str 方法来生成此 df,但无法弄清楚如何获得 2008-2009 财政年度的正确结果。

最佳答案

在下面的代码中,我假设 Shortcut_Dimension_4_Code 是一个整数。如果它是字符串,您可以将其转换或切片,如下所示:df['Shortcut_Dimension_4_Code'].str[:-6]。更多解释见代码旁边的注释。

只要您不必处理空值,这应该就可以工作。

import pandas as pd
import numpy as np
from datetime import date
from dateutil.relativedelta import relativedelta

fiscal_month_offset = 6

input_df = pd.DataFrame(
[[10225003, 2],
[8225003, 1],
[8225004, 3],
[8225005, 4]],
columns=['Shortcut_Dimension_4_Code', 'Stage_Code'])

# make a copy of input dataframe to avoid modifying it
df = input_df.copy()

# numpy will help us with numeric operations on large collections
df['fiscal_year'] = 2000 + np.floor_divide(df['Shortcut_Dimension_4_Code'], 1000000)

# loop with `apply` to create `date` objects from available columns
# day is a required field in date, so we'll just use 1
df['fiscal_date'] = df.apply(lambda row: date(row['fiscal_year'], row['Stage_Code'], 1), axis=1)

df['calendar_date'] = df['fiscal_date'] - relativedelta(months=fiscal_month_offset)
# by default python dates will be saved as Object type in pandas. You can verify with `df.info()`
# to use clever things pandas can do with dates we need co convert it
df['calendar_date'] = pd.to_datetime(df['calendar_date'])

# I would just keep date as datetime type so I could access year and month
# but to create same representation as in question, let's format it as string
df['Date'] = df['calendar_date'].dt.strftime('%m/%Y')

# copy important columns into output dataframe
output_df = df[['Shortcut_Dimension_4_Code', 'Stage_Code', 'Date']].copy()
print(output_df)

关于python - 切片、合并会计年度日期并将其映射到日历年日期到新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52544043/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com