Python 按日期和列名匹配2个数据帧以获取值
我有两个数据帧(它们已经是数据帧格式,但为了便于说明,我首先将它们创建为字典): 及 现在,如果Python 按日期和列名匹配2个数据帧以获取值,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两个数据帧(它们已经是数据帧格式,但为了便于说明,我首先将它们创建为字典): 及 现在,如果df1.Date按年份和月份与df2.Date匹配,我想在df1中添加一个额外的列,其中包含df2的值(日期通常不匹配,因为df1包含月末日期)如果df2的列名与相应的df1.name值匹配 所以结果应该是这样的: df_new = { 'Date':['2013-02-14','2013-03-03','2013-05-02','2014-10-31'], 'Name
df1.Date
按年份和月份与df2.Date
匹配,我想在df1
中添加一个额外的列,其中包含df2
的值(日期通常不匹配,因为df1
包含月末日期)如果df2
的列名与相应的df1.name
值匹配
所以结果应该是这样的:
df_new = {
'Date':['2013-02-14','2013-03-03','2013-05-02','2014-10-31'],
'Name':['Felix','Felix','Peter','Paul'],
'Values':['Value1_x','Value2_x','Value3_y','NaN']}
df_new = pd.DataFrame(df_new)
你对如何解决这个问题有什么建议吗
我考虑为year
和month
(df1['year']=df1['Date'].dt.year
)创建额外的列,然后匹配df1[[df1['year']==df2['year']]和(df1['month']==df2[/code>,并调用df2.column
,但总的来说,我不知道如何将所有内容放在一起,尽量不要把你的数据集以图片的形式发布,b/c这很难帮到你
我认为最简单的方法是在每个数据框中创建一列,日期
四舍五入到每个月的第一天
df1['Date_round'] = df1['Date'] - pd.offsets.MonthBegin(1)
df2['Date_round'] = df2['Date'] - pd.offsets.MonthBegin(1)
然后使用melt
重塑df2
df2_reshaped = df2.melt(id_vars=['Date','Date_round'], var_name='Name', value_name='Values')
然后,您可以使用pd.merge
在Date\u round
和Name
上加入数据帧
df = pd.merge(df1, df2_reshaped.drop('Date', axis=1), how='left', on=['Date_round', 'Name'])
df2_reshaped = df2.melt(id_vars=['Date','Date_round'], var_name='Name', value_name='Values')
df = pd.merge(df1, df2_reshaped.drop('Date', axis=1), how='left', on=['Date_round', 'Name'])