Python pandas 计算groupby后的份额
Python pandas calculate share of after groupby
我想按邮政编码对以下类型的数据集进行分组,并计算每个运输方式在每个邮政编码中所占的已完成订单份额。
我已经实现了一个 csv 文件并尝试了下面的代码,但我意识到我需要为此使用 MultiIndex - 因为我有很多不同的邮政编码,所以我不确定如何使用它。
postalcode
shipping_method
completed_orders
12345
post1
1
12345
post2
3
12345
post3
2
11123
post1
1
11123
post2
2
import numpy as np
import pandas as pd
shipping_data = pd.read_csv("shipping_per_postalcode.csv")
shareof = lambda x: x/x.sum()
result = shipping_data['amount_users_completed'].groupby(level=['postalcode', 'shipping_option']).transform(sumto)
print(result)
像这样?
result = df['completed_orders'] / df.groupby(['postalcode'])['completed_orders'].transform(sum)
# Out[43]:
# 0 0.166667
# 1 0.500000
# 2 0.333333
# 3 0.333333
# 4 0.666667
# Name: completed_orders, dtype: float64
您可能需要额外的 groupby 来获得百分比贡献
df_agg=df_1.groupby(['postalcode', 'shipping_method'])['completed_orders'].sum()
df_agg.groupby(level=0).apply(lambda x: 100*x/float(x.sum()))
来源:Pandas percentage of total with groupby
我想按邮政编码对以下类型的数据集进行分组,并计算每个运输方式在每个邮政编码中所占的已完成订单份额。 我已经实现了一个 csv 文件并尝试了下面的代码,但我意识到我需要为此使用 MultiIndex - 因为我有很多不同的邮政编码,所以我不确定如何使用它。
postalcode | shipping_method | completed_orders |
---|---|---|
12345 | post1 | 1 |
12345 | post2 | 3 |
12345 | post3 | 2 |
11123 | post1 | 1 |
11123 | post2 | 2 |
import numpy as np
import pandas as pd
shipping_data = pd.read_csv("shipping_per_postalcode.csv")
shareof = lambda x: x/x.sum()
result = shipping_data['amount_users_completed'].groupby(level=['postalcode', 'shipping_option']).transform(sumto)
print(result)
像这样?
result = df['completed_orders'] / df.groupby(['postalcode'])['completed_orders'].transform(sum)
# Out[43]:
# 0 0.166667
# 1 0.500000
# 2 0.333333
# 3 0.333333
# 4 0.666667
# Name: completed_orders, dtype: float64
您可能需要额外的 groupby 来获得百分比贡献
df_agg=df_1.groupby(['postalcode', 'shipping_method'])['completed_orders'].sum()
df_agg.groupby(level=0).apply(lambda x: 100*x/float(x.sum()))
来源:Pandas percentage of total with groupby