Я пытаюсь вычислить суммарную сумму и затем разделить каждый столбец этой совокупной суммы на другой столбец фрейма данных. См. Код ниже.Pandas divide создает дополнительные столбцы и NaN
import pandas as pd
import numpy as np
def cum_sums(input_df):
bin_values = np.arange(0, 72, 24)
group_names = np.arange(0, 48, 24)
input_df['categories'] = pd.cut(input_df['time'], bin_values, labels=group_names)
category_sum = input_df.groupby(['area', 'categories'])['categories'].size()
cum_sum = category_sum.groupby(level=[0]).cumsum().reset_index(name='cum_sum')
# pivot to get right format
cum_sum_flipped = cum_sum.pivot(index='area', columns='categories', values='cum_sum')
# and then add back in any missing categories
cum_sum_flipped = cum_sum_flipped.reindex(columns=group_names).ffill(axis=1).replace('Nan', 0, regex=True)
return cum_sum_flipped
data1 = {'area': ['a', 'b', 'c', 'a', 'b'],
'time': [7, 11, 25, 27, 34]}
data2 = {'area': ['a', 'b', 'c'],
"count": [2, 2, 3]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df = cum_sums(df1)
print(df)
print(df2['count'])
df = df.div(df2['count'], axis='columns')
print(df)
Это дает:
0 1 2 24
area
a 0.5 NaN NaN NaN
b 0.5 NaN NaN NaN
c 0.0 NaN NaN NaN
Где бы ожидать:
0 24
area
a 0.5 1.0
b 0.5 1.0
c 0.0 0.33333
я подозреваю, добавив назад в недостающих категорий я меняюсь, каким образом Див работает, но это предположение. Что мне недостает, чтобы получить ответ, который я ожидаю?