Как умножить 2 неприсоединившиеся серии Pandas и получить серию продуктов с мультииндексом - PullRequest
1 голос
/ 06 апреля 2020

Я хочу рассчитать произведенную энергию ветра по установленному_капитализму_году * full_load_hours_quarterly. У меня есть

installed_capacity_yearly = pd.Series(
    data=[12, 15, 21],
    index=[2020, 2021, 2022])

full_load_hours_quarterly = pd.Series(
    data=[900, 700, 600, 800], 
    index=['Q1', 'Q2', 'Q3', 'Q4'])

Форма 'full_load_hours_quarterly' будет повторяться для каждого года в Instal_capacity_yearly. Ожидаемый результат должен выглядеть как

quarterly_energy

year  quarter    volume
2020  Q1         10800
      Q2          8400
      Q3          7200
      Q4          9600
2021  Q1         13500
      Q2         10500
      Q3          9000
      Q4         12000
2022  Q1         18900
      Q2         14700
      Q3         12600
      Q4         16800

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Вы можете использовать dot:

(installed_capacity_yearly.to_frame()
    .dot(full_load_hours_quarterly.to_frame().T)
    .stack()
)

Выход:

2020  Q1    10800
      Q2     8400
      Q3     7200
      Q4     9600
2021  Q1    13500
      Q2    10500
      Q3     9000
      Q4    12000
2022  Q1    18900
      Q2    14700
      Q3    12600
      Q4    16800
dtype: int64
1 голос
/ 06 апреля 2020

Создайте MultiIndex.from_product по обоим значениям индекса, затем используйте Series.reindex и последний кратный по Series.mul:

mux = pd.MultiIndex.from_product([installed_capacity_yearly.index, 
                                  full_load_hours_quarterly.index])
s1 = installed_capacity_yearly.reindex(mux, level=0)
s2 = full_load_hours_quarterly.reindex(mux, level=1)
s = s1.mul(s2)
print (s)
2020  Q1    10800
      Q2     8400
      Q3     7200
      Q4     9600
2021  Q1    13500
      Q2    10500
      Q3     9000
      Q4    12000
2022  Q1    18900
      Q2    14700
      Q3    12600
      Q4    16800
dtype: int64
...