Подсчет неотфильтрованных значений value_counts вместе с отфильтрованными значениями в pandas - PullRequest
1 голос
/ 30 мая 2020

Предполагая, что у меня есть фрейм данных для выпечки

       Pastry      Flavor      Qty
0     Cupcake      Cheese      3
1   Cakeslice   Chocolate      2
2        Tart       Honey      2
3   Croissant   Raspberry      1

И я получаю количество значений определенного c вкуса для каждого теста

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 (кекс и пирог) et c, et c.

Я хочу уменьшить этот 95-й процентиль, подсчитав все остальные значения, которые являются не «Сыр» в столбце вкуса, однако value_counts () подсчитывает только те, которые являются «Сыром», потому что я отфильтровал фрейм данных. Как я могу также подсчитать строки без сыра, чтобы мои процентили были go вниз и представляли распределение общего количества сыра во всем фрейме данных?

Это пример вывода:

Cupcake    4
Tart       4
Cakeslice  3
Turnover   3
Creampie   2
Danish     2
Bear Claw  2
Swiss Roll 1
Baklava    0
Cannoli    0

Там, где выпечка без сырного вкуса включается с 0 в качестве количества, оттуда я могу просто получить процентили, и они будут уменьшены, поскольку теперь их разбавляет 0 значений.

1 Ответ

0 голосов
/ 30 мая 2020

Я решил go и попробовать длинный путь, чтобы попытаться решить этот вопрос, и мой результат дал мне тот же ответ, что и этот вопрос

Вот длинный путь, в если кому-то интересно.

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...