Как получить соединение, основанное на условии в пандах? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть образец данных ниже как

df1

date        ac_pd   
2013-06-15  3.252   
2013-06-30  1.542   
2013-07-15  10.254  
2013-07-31  16.348  

И еще один df содержит ежедневные данные:

df2

date        a_1     a_2     a_3     a_4
03/06/2013  2150    1146    204     22130
04/06/2013  2412    1270    520     23860
25/06/2013  2470    1408.5  610     27690
06/01/2014  2252    1607    793     2180

И я хотел бы преобразовать ежемесячные данные df2 в двухнедельный формат даты в df1, взяв среднее значение. например, если df1 имеет дату 15-06-2003, тогда он должен получить среднее значение a_1 в период с 1-06-2003 по 15-06-2003. Могут быть шансы, что каждый день в месяце отсутствует, но нам нужно взять среднее значение из того, что доступно.

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  

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете использовать resample с SM смещенным псевдонимом для частоты окончания полугодия, а затем удалять только NaN s строк на dropna и join до 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...