繁体   English   中英

Python Dataframe: To get a column value from 2nd dataframe based on a column in the 1st dataframe is in between two columns in the 2nd dataframe

[英]Python Dataframe: To get a column value from 2nd dataframe based on a column in the 1st dataframe is in between two columns in the 2nd dataframe

有两个数据框。 df1 有 2 列代码和日期

在此处输入图像描述

df2 有 4 列代码、开始日期、结束日期和年份

在此处输入图像描述

如何根据 df1 中的日期从 df2 添加年份在 df2 的开始日期和结束日期之间。

所需的 output 为

在此处输入图像描述

您将需要修改 df2 ,使其在每个代码/年份的开始和结束范围之间的每一天都有一个新行。

您可以通过为每一行创建一个每日日期范围列表并将其分解为多行来做到这一点。 然后您可以简单地将两者合并在一起并获得您想要的结果。

这是一个小例子:

import pandas as pd
df = pd.DataFrame({'Code':[101],'weekEndingDate':['2022-07-01']})
df2 = pd.DataFrame({'Code':[101, 101], 'start':['2022-06-01', '2021-06-01'],'end':['2023-05-01', '2022-05-31'],'year':[2023, 2022]})


df['weekEndingDate'] = pd.to_datetime(df['weekEndingDate'])
df2['range'] = df2.apply(lambda x: pd.date_range(x.start,x.end, freq='D'), axis=1)
df2 = df2.explode('range')

df = df.merge(df2[['range','year']], left_on='weekEndingDate', right_on='range').drop(columns='range')

print(df)

Output

   Code weekEndingDate  year
0   101     2022-07-01  2023

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM