我们有销售数据。您需要为每个帐户添加帐户中不同商品的总数。其他猫头鹰 - 添加一列,其中每个组将是该组列的总和。此代码有效。
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:在未来的版本中,
df.iloc[:, i] = newvals
将尝试就地设置值,而不是总是设置一个新数组。要保留旧行为,请使用df[df.columns[i]] = newvals
或者,如果列不唯一,则使用df.isetitem(i, newvals)
g.loc[:, "units_in_order"] = order_sum
两个问题。
- 感觉更好(更短、更容易、更快)
- 最后的信息是什么。它有潜在的危险吗?
当然,它可以更短:
df_fee: