Создайте столбец на основе ограничений incolumn - PullRequest
0 голосов
/ 31 октября 2019

У меня есть фрейм данных, имеющий 2 столбца:

F_Date     Count
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421
01/09/2019  1421

Я хочу создать новый столбец date_2 такой, чтобы для 1/5 значений счетчика (в нашем примере, например, 1421 * 20), мы имели F_date +1 и для 2/5-го значения счетчика у нас есть F_Date + 2, а для другого 1/5-го значения у нас есть F_date + 3, а для последнего 1/5-го значения у нас есть F_Date + 4.

для нашего примера,вывод будет

1421/5 = 284,2 (раунд до ближайшего, т.е. 284) записи должны иметь F_Date + 1 1421/5 = 284 * 2 = 568 записей должны иметь F_Date + 2

1421/ 5 = 284 записи должны иметь F_Date + 3

1421/5 = 284 + 1 (поскольку 1 будет оставаться после округления) должны иметь F_Date + 4

Ожидаемые выходные столбцы

F_Date     Count    Date_2

Может ли кто-нибудь помочь с тем же.

1 Ответ

1 голос
/ 31 октября 2019

Если я вас правильно понимаю:

import pandas as pd
import numpy as np

old_df = pd.DataFrame({'F_Date': ["01/09/2019" for _ in range(1421)],
                   "Count": [1421 for _ in range(1421)]})

def split_dates(old):
    df = old.copy()
    df["Date_2"] = np.where((df.index//(df["Count"]//5)).astype(int)<4,
                            (df.index//(df["Count"]//5)).astype(int),
                            4)
    df["F_Date"] = pd.to_datetime(df["F_Date"],format="%M/%d/%Y")
    df["Date_2"] = df["F_Date"]+pd.to_timedelta(df["Date_2"], 'd')
    return df

new_df = split_dates(old_df)

print (new_df)
#
                  F_Date  Count              Date_2
0    2019-01-09 00:01:00   1421 2019-01-09 00:01:00
1    2019-01-09 00:01:00   1421 2019-01-09 00:01:00
2    2019-01-09 00:01:00   1421 2019-01-09 00:01:00
3    2019-01-09 00:01:00   1421 2019-01-09 00:01:00
4    2019-01-09 00:01:00   1421 2019-01-09 00:01:00
...                  ...    ...                 ...
1416 2019-01-09 00:01:00   1421 2019-01-13 00:01:00
1417 2019-01-09 00:01:00   1421 2019-01-13 00:01:00
1418 2019-01-09 00:01:00   1421 2019-01-13 00:01:00
1419 2019-01-09 00:01:00   1421 2019-01-13 00:01:00
1420 2019-01-09 00:01:00   1421 2019-01-13 00:01:00

[1421 rows x 3 columns]

print (new_df.groupby(["Date_2"]).count())
#
                     F_Date  Count
Date_2                            
2019-01-09 00:01:00     284    284
2019-01-10 00:01:00     284    284
2019-01-11 00:01:00     284    284
2019-01-12 00:01:00     284    284
2019-01-13 00:01:00     285    285
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...