我有两个数据框(它们已经是数据框格式,但是为了说明起见,我首先将它们创建为字典):
first = {
'Date':['2013-02-14','2013-03-03','2013-05-02','2014-10-31'],
'Name':['Felix','Felix','Peter','Paul']}
df1 = pd.DataFrame(first)
和
second = {
'Date':['2013-02-28','2013-03-31','2013-05-30','2014-10-31'],
'Felix':['Value1_x','Value2_x','Value3_x','Value4_x'],
'Peter':['Value1_y','Value2_y','Value3_y','Value4_y']}
df2 = pd.DataFrame(second)
现在,如果df1
按年份与values
相匹配,我想在df2
的{{1}}中向df1.Date
添加一个附加列月份(由于df2.Date
包含月末日期,因此通常不匹配该日期),并且如果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['month'])]
,但是我不知道如何把所有东西放在一起
答案 0 :(得分:1)
通常,尽量不要将您的数据集发布为图像,否则,很难帮助您。
我认为最简单的方法是在每个数据框中创建一列,其中Date
会四舍五入到每个月的第一天。
df1['Date_round'] = df1['Date'] - pd.offsets.MonthBegin(1)
df2['Date_round'] = df2['Date'] - pd.offsets.MonthBegin(1)
然后使用df2
重塑melt
。
df2_reshaped = df2.melt(id_vars=['Date','Date_round'], var_name='Name', value_name='Values')
然后您可以使用Date_round
将Name
和pd.merge
上的数据帧合并起来。
df = pd.merge(df1, df2_reshaped.drop('Date', axis=1), how='left', on=['Date_round', 'Name'])