Pandas-我如何迭代列表以根据另一列中的条件填充另一列?

9wbgstp7  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(105)

我有一个带有['Creation Date']列的dataframe。我已经为对应于2年会计日历(2022年5月至2023年4月)上的一个月的24个日期范围中的每一个创建了一个变量。我还有一个变量列表。

我需要创建一个新列['Fiscal Month'],并根据[' Creation Date ']列中的值,用该列表(fiscal_months)中的值填充该列。因此,我需要它具有以下结构(除了实际df是200,000+行):

我尝试了几种不同的方法:mfg_df['Fiscal Month'] = np.where(mfg_df['NCMR Creation Date'].isin([fiscal_months])
但是刚刚得到了一个ValueError:应给出x和y中的任一个或两者都不给出
老实说,我甚至不知道该尝试什么,我是一个相当新的分析师,只是试图清理和转换数据的预测模型。

nue99wik

nue99wik1#

我有个办法可以帮你

  • 将有关会计月结束日期和会计月(名称)的信息放入按会计月结束日期排序的 Dataframe dfFiscal
  • 创建一个 Dataframe df,其中包含一个创建日期列,其值要Map到会计月
  • 使用merge_asof()进行查找(首先确保df按创建日期排序)。
out = ( pd.merge_asof(df.sort_values('Creation Date'), dfFiscal, 
    left_on='Creation Date', right_index=True).sort_index() )

创建示例输入的代码:

dfFiscal = pd.DataFrame(
[
['2021-04-25','Apr21'],
['2021-05-28','May21'],
['2021-07-02','Jun21'],
['2021-07-30','Jul21'],
['2021-08-27','Aug21'],
['2021-10-01','Sep21'],
['2021-10-29','Oct21'],
['2021-11-26','Nov21'],
['2021-12-31','Dec21'],
['2022-01-28','Jan22']], columns=['Fiscal Month End','Fiscal Month'])
dfFiscal['Fiscal Month End'] = pd.to_datetime(dfFiscal['Fiscal Month End'])
dfFiscal = dfFiscal.set_index(pd.DatetimeIndex(dfFiscal['Fiscal Month End'])).sort_index().drop(columns='Fiscal Month End')

df = pd.DataFrame({
'Creation Date':pd.to_datetime(['2021-04-26', '2021-05-27', '2021-05-28', '2021-07-02', '2021-04-26'])
})

样品输入:

dfFiscal:
                 Fiscal Month
Fiscal Month End
2021-04-25              Apr21
2021-05-28              May21
2021-07-02              Jun21
2021-07-30              Jul21
2021-08-27              Aug21
2021-10-01              Sep21
2021-10-29              Oct21
2021-11-26              Nov21
2021-12-31              Dec21
2022-01-28              Jan22

df:
  Creation Date
0    2021-04-26
1    2021-05-27
2    2021-05-28
3    2021-07-02
4    2021-04-26

输出:

Creation Date Fiscal Month
0    2021-04-26        Apr21
1    2021-05-27        Apr21
2    2021-05-28        May21
3    2021-07-02        Jun21
4    2021-04-26        Apr21

相关问题