Добавить в pandas столбец с промежуточными суммами по групам
Есть данные по продажам. нужно добавить для каждого счета общее количество штук различных товаров по счету. Другими совами - добавить столбец где для каждой группы будет сумма столбца по данной группе. Данный код работает.
import pandas as pd
df_fee = pd.DataFrame(
dict(
sku=2*[1, 1, 2, 3, 4, 4],
order_id=3*[3, 3, 4, 5],
quantity=4*[ 1, 2, 3],
)
)
def __count_nd_fill_units_by_group(g):
order_sum = g['quantity'].sum()
g.loc[:, "units_in_order"] = order_sum
#
# g = g.assign(units_in_order=order_sum)
#
return g
print(df_fee)
df_fee.loc[:, "units_in_order"] = None
df_fee = df_fee.groupby(['order_id', ], group_keys=False).apply(__count_nd_fill_units_by_group)
df_fee.sort_values(by=['order_id',], inplace=True)
print(df_fee)
и выдает такой результат:
sku order_id quantity
0 1 3 1
1 1 3 2
2 2 4 3
3 3 5 1
4 4 3 2
5 4 3 3
6 1 4 1
7 1 5 2
8 2 3 3
9 3 3 1
10 4 4 2
11 4 5 3
sku order_id quantity units_in_order
0 1 3 1 12
1 1 3 2 12
4 4 3 2 12
5 4 3 3 12
8 2 3 3 12
9 3 3 1 12
2 2 4 3 6
6 1 4 1 6
10 4 4 2 6
3 3 5 1 6
7 1 5 2 6
11 4 5 3 6
d:\onedrive\projects\chud_amaz\soft_in_dev\moduled_way_oop\code_questions\order_total_units_filling.py:21: FutureWarning: In a future version,
df.iloc[:, i] = newvals
will attempt to set the values inplace instead of always setting a new array. To retain the old behavior, use eitherdf[df.columns[i]] = newvals
or, if columns are non-unique,df.isetitem(i, newvals)
g.loc[:, "units_in_order"] = order_sum
Два вопроса.
- по ощущениям можно лучше (короче, проще, быстрее)
- что за сообщение выдается в конце. Это потенциально опасно?
Источник: Stack Overflow на русском