умножение столбца на другой, если это тот же год - PullRequest
0 голосов
/ 10 мая 2018

У меня есть 2 кадра данных, один выбирается ежемесячно, а другой - ежегодно с индексом datetime.

Я хочу умножить значения из столбца в месячном кадре данных на значение из столбца в годовом исчислении.датафрейм, если это тот же год.Как я могу это сделать?

Большое спасибо за вашу помощь,

df = pd.DataFrame({'column1' : [1, 1, 1, 2, 2]}, index=['2018-01-01', '2018-01-02', '2018-01-03', '2019-01-03', '2019-01-02'])
df.index=  pd.to_datetime(df.index)

df
            column1
2018-01-01        1
2018-01-02        1
2018-01-03        1
2019-01-03        2
2019-01-02        2

df2 = pd.DataFrame({'columnX' : [2, 3]}, index=['2018', '2019']) 
df2.index=  pd.to_datetime(df2.index)    

df2

            columnX
2018-01-01        2
2019-01-01        3

Ожидаемый результат:

df
              Column1  Results
    2018-01-01    1        2
    2018-01-02    1        2
    2018-01-03    1        2
    2019-01-03    2        6
    2019-01-02    2        6

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Другой подход:

df2.index = df2.index.map(lambda x: x.year)
df['Result'] = df.apply(lambda y: y['column1'] * df2['columnX'][y.name.year], axis=1)
0 голосов
/ 10 мая 2018

Это альтернативное решение с использованием numpy:

s = df2.assign(x=df2.index.year).set_index('x')['columnX']
df['Result'] = np.vectorize(s.get)(df.index.year) * df['column1'].values

print(df)

            column1  Result
2018-01-01        1       2
2018-01-02        1       2
2018-01-03        1       2
2019-01-03        2       6
2019-01-02        2       6
0 голосов
/ 10 мая 2018
In [57]: df = (df.assign(y=df.index.year)
    ...:         .merge(df2.assign(y=df2.index.year), how='left')
    ...:         .eval("Results = column1 * columnX")
    ...:         .drop(['columnX','y'],1)
    ...:         .set_index(df.index))
    ...:
    ...:

In [58]: df
Out[58]:
            column1  Results
2018-01-01        1        2
2018-01-02        1        2
2018-01-03        1        2
2019-01-03        2        6
2019-01-02        2        6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...