假设我有一个糕点的数据框架
Pastry Flavor Qty
0 Cupcake Cheese 3
1 Cakeslice Chocolate 2
2 Tart Honey 2
3 Croissant Raspberry 1
我得到了每个糕点的特定口味的价值计数
df[df['Flavor'] == 'Cheese']['Pastry'].value_counts()
Cupcake 4
Tart 4
Cakeslice 3
Turnover 3
Creampie 2
Danish 2
Bear Claw 2
然后,为了得到该味道数量的百分位数,我可以这样做
df[df['Flavor'] == 'Cheese']['Pastry'].value_counts().describe(percentiles=[.75, .85, .95])
我会得到像这样的东西(来自完整的数据帧)
count 35.00000
mean 1.485714
std 0.853072
min 1.000000
50% 1.000000
75% 2.000000
85% 2.000000
95% 3.300000
max 4.000000
其中有35种不同的奶酪口味的糕点,所以总的奶酪数量分布在这35种糕点中。平均数量为1.48,最大数量为4(纸杯蛋糕和馅饼)等。
我想要做的是通过计算味道列中不是'Cheese‘的所有其他值来减少第95个百分位数,但是value_counts()只计算那些'Cheese’的值,因为我过滤了数据帧。我如何计算非Cheese行,以便我的百分位数将下降,并表示整个数据帧中Cheese总数的分布?
这是一个输出示例:
Cupcake 4
Tart 4
Cakeslice 3
Turnover 3
Creampie 2
Danish 2
Bear Claw 2
Swiss Roll 1
Baklava 0
Cannoli 0
在非奶酪口味的糕点中包含0作为数量,我可以从那里获得百分位数,它们将被减少,因为现在有0值稀释它们。
发布于 2020-05-30 19:28:59
我决定走很长一段路来尝试解决这个问题,我的结果给了我与this问题相同的答案
这里有很长的路要走,以防有人好奇。
pastries = {}
for p in df['Pastry'].unique():
pastries[p] = df[(df['Flavor'] == 'Cheese') & (df['Pastry'] == p)]['Pastry'].count()
newdf = pd.DataFrame.from_dict(pastries.items())
newdf.describe(percentiles=[.75, .85, .95])
https://stackoverflow.com/questions/62096666
复制相似问题