Вопрос:

Питон VLOOKUP по датам - Панды

python excel pandas dataframe membership

394 просмотра

1 ответ

15 Репутация автора

Имея проблему с pandas df, пытаясь получить столбец «Count» на основе даты, код должен искать «диапазон дат» в столбце дат, и, если он присутствует, «Count» должен быть скопирован в « Столбец «Записи» для соответствующей даты, например: значение date_range = 16/02/2017 - код ищет 16/02/2017 в столбце «Даты» и делает «Сообщения» равными значению «Количество» этой даты - если date_range значение не появляется - сообщения должны = 0.

Пример данных:

Dates     Count date_range  Posts
0   07/02/2017  1   16/12/2016  (should = 5)   
1   01/03/2017  1   17/12/2016  
2   15/02/2017  1   18/12/2016  
3   23/01/2017  1   19/12/2016  
4   28/02/2017  1   20/12/2016  
5   09/02/2017  2   21/12/2016  
6   20/03/2017  2   22/12/2016  
7   16/12/2016  5   

Мой код выглядит так:

    DateList = df['Dates'].tolist()

    for date in df['date_range']:
        if str(date) in DateList:
            df['Posts'] = df['Count']
        else:
            dates_df['Posts'] = 0

Однако это делает данные отображают неправильные значения в «сообщения»

Надеюсь, я объяснил это правильно! Заранее спасибо за помощь!

Автор: J3319 Источник Размещён: 06.04.2017 02:42

Ответы (1)


1 плюс

408527 Репутация автора

Решение

Вы можете сначала создать dictсоответствующие значения, а затем mapпо date_rangeстолбцу:

print (df)
        Dates  Count  date_range
0  07/02/2017      1  16/12/2016
1  01/03/2017      1  17/12/2016
2  15/02/2017      1  18/12/2016
3  23/01/2017      1  19/12/2016
4  28/02/2017      1  07/02/2017 <-change value for match
5  09/02/2017      2  21/12/2016
6  20/03/2017      2  22/12/2016
7  16/12/2016      5  22/12/2016

d = df[df['Dates'].isin(df.date_range)].set_index('Dates')['Count'].to_dict()
print (d)
{'16/12/2016': 5, '07/02/2017': 1}

df['Posts'] = df['date_range'].map(d).fillna(0).astype(int)
print (df)
        Dates  Count  date_range  Posts
0  07/02/2017      1  16/12/2016      5
1  01/03/2017      1  17/12/2016      0
2  15/02/2017      1  18/12/2016      0
3  23/01/2017      1  19/12/2016      0
4  28/02/2017      1  07/02/2017      1
5  09/02/2017      2  21/12/2016      0
6  20/03/2017      2  22/12/2016      0
7  16/12/2016      5  22/12/2016      0
Автор: jezrael Размещён: 06.04.2017 02:57
Вопросы из категории :
32x32