Pandas 如何根据熊猫中的条件获取联接?
我有下面的示例数据框 df1 另外,另一个df包含每日数据: df2 我想通过取平均值,将df2每月数据转换为df1中的双周日期格式。例如,如果df1的日期为2003年6月15日,则其应获得2003年6月1日至2003年6月15日之间的平均值。有可能一个月内的每一天都不存在,但我们需要对可用的时间进行平均Pandas 如何根据熊猫中的条件获取联接?,pandas,Pandas,我有下面的示例数据框 df1 另外,另一个df包含每日数据: df2 我想通过取平均值,将df2每月数据转换为df1中的双周日期格式。例如,如果df1的日期为2003年6月15日,则其应获得2003年6月1日至2003年6月15日之间的平均值。有可能一个月内的每一天都不存在,但我们需要对可用的时间进行平均 date ac_pd a_1 a_2 2013-06-15 3.252 2013-06-30 1.542 2013-07-15 10.254 20
date ac_pd a_1 a_2
2013-06-15 3.252
2013-06-30 1.542
2013-07-15 10.254
2013-07-31 16.348
您可以与SM
一起使用半个月结束频率,然后通过默认的左连接仅删除NaN
s行和到df1
:
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'], dayfirst=True)
df22 = df2.resample('SM',on='date').mean().dropna(how='all')
print (df22)
a_1 a_2 a_3 a_4
date
2013-05-31 2281.0 1208.0 362.0 22995.0
2013-06-15 2470.0 1408.5 610.0 27690.0
2013-12-31 2252.0 1607.0 793.0 2180.0
df = df1.join(df22, on='date')
print (df)
date ac_pd a_1 a_2 a_3 a_4
0 2013-06-15 3.252 2470.0 1408.5 610.0 27690.0
1 2013-06-30 1.542 NaN NaN NaN NaN
2 2013-07-15 10.254 NaN NaN NaN NaN
3 2013-07-31 16.348 NaN NaN NaN NaN
date ac_pd a_1 a_2
2013-06-15 3.252
2013-06-30 1.542
2013-07-15 10.254
2013-07-31 16.348
df1['date'] = pd.to_datetime(df1['date'])
df2['date'] = pd.to_datetime(df2['date'], dayfirst=True)
df22 = df2.resample('SM',on='date').mean().dropna(how='all')
print (df22)
a_1 a_2 a_3 a_4
date
2013-05-31 2281.0 1208.0 362.0 22995.0
2013-06-15 2470.0 1408.5 610.0 27690.0
2013-12-31 2252.0 1607.0 793.0 2180.0
df = df1.join(df22, on='date')
print (df)
date ac_pd a_1 a_2 a_3 a_4
0 2013-06-15 3.252 2470.0 1408.5 610.0 27690.0
1 2013-06-30 1.542 NaN NaN NaN NaN
2 2013-07-15 10.254 NaN NaN NaN NaN
3 2013-07-31 16.348 NaN NaN NaN NaN