как умножить значения с группой данных из серии панд без итерации цикла - PullRequest
1 голос
/ 11 октября 2019

У меня есть два временных ряда панд с разной длиной и индексом, а также логический ряд. Series_1 - это последние данные каждого месяца с индексом последний день месяца, series_2 - ежедневные данные с индексом daily, логический ряд - True в последний день каждого месяца, иначе как false.

Я хочучтобы получить данные из серии series_1 (s1 [0]) и данных из серии series_2 (s2 [1: n]), которые являются ежедневными данными за один месяц, есть ли способ сделать это без цикла?

series_1 = 2010-06-30    1
           2010-07-30    2
           2010-08-31    5
           2010-09-30    7
series_2 = 2010-07-01    2
           2010-07-02    3
           2010-07-03    5
           2010-07-04    6
            .....
           2010-07-30     7
           2010-08-01     6
           2010-08-02     7
           2010-08-03     5
           .....
           2010-08-31     6
Boolean = False
          false
          ....
          True
          False
          False
          ....
          True

(только с концом каждого месяца True)

хотите получить серию, в результате которой s = series_1[i] * series_2[j:j+n] (n данных за тот же месяц)

Как это сделать? Заранее спасибо

1 Ответ

0 голосов
/ 11 октября 2019

Не уверен, что я правильно понял ваш вопрос, но он должен вас туда ответить:

series_1 = pd.Series({
    '2010-07-30': 2,
    '2010-08-31': 5
})

series_2 = pd.Series({
    '2010-07-01': 2,
    '2010-07-02': 3,
    '2010-07-03': 5,
    '2010-07-04': 6,
    '2010-07-30': 7,
    '2010-08-01': 6,
    '2010-08-02': 7,
    '2010-08-03': 5,
    '2010-08-31': 6
})

Сделайте серию Datetime осведомленной и повторите выборку с ежедневной частотой:

series_1.index = pd.DatetimeIndex(series_1.index)
series_1 = series_1.resample('1D').asfreq()

series_2.index = pd.DatetimeIndex(series_2.index)
series_2 = series_2.resample('1D').asfreq()

Поместите их в кадр данных и выполните базовое умножение:

df = pd.DataFrame()
df['1'] = series_1
df['2'] = series_2
df['product'] = df['1'] * df['2']

Результат:

>>> df
              1    2  product
2010-07-30  2.0  7.0     14.0
2010-07-31  NaN  NaN      NaN
2010-08-01  NaN  6.0      NaN
2010-08-02  NaN  7.0      NaN
2010-08-03  NaN  5.0      NaN
[...]
2010-08-27  NaN  NaN      NaN
2010-08-28  NaN  NaN      NaN
2010-08-29  NaN  NaN      NaN
2010-08-30  NaN  NaN      NaN
2010-08-31  5.0  6.0     30.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...