【问题标题】:Counting non-filtered value_counts along with filtered values in pandas计算未过滤的 value_counts 以及 pandas 中的过滤值
【发布时间】:2020-05-30 01:11:51
【问题描述】:

假设我有一个糕点数据框

       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(纸杯蛋糕和蛋挞)等。

我想要做的是通过计算风味列中所有其他不是“奶酪”的值来降低第 95 个百分位,但是 value_counts() 只计算那些是“奶酪”的值,因为我过滤了数据框。如何计算非 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 值稀释它们。

【问题讨论】:

  • 您在寻找 df.Qty.describe(percentiles=[.95])
  • @Chris 原始数据框上没有数量列,这是用于说明目的的示例数据框。我通过运行 df[df['Flavor] == 'Cheese'].value_counts() 获得原始数据帧的数量,它返回每个糕点的“奶酪”行数,但我想基本上包括所有不是奶酪为 0,以便我可以稀释百分位数。
  • @Salchipapas 输入帧你已经有分片如果你可以分享预期输出的样本会很容易理解,也看看这是否可以带你到某个方向stackoverflow.com/questions/62034736/…

标签: python pandas


【解决方案1】:

我决定走很长的路来尝试解决这个问题,我的结果给了我与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])

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多