Pandas DataFrame - фильтровать, агрегировать и затем возвращать исходный предварительно отфильтрованный набор данных? - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь найти способ взять DataFrame для электронной коммерции, отфильтровать некоторые значения, рассчитать агрегированные метрики для каждого CustomerID, а затем назначить их обратно каждому CustomerID предварительно отфильтрованному набору данных.

Например, набор фиктивных данных выглядит так:

CustomerID   Month  Value
a                1     10
a                2     20
a                3     20
b                1     30
b                2     40
c                1     80
c                2     90

Я хочу отфильтровать набор данных в столбце Month, где он равен «1», затем рассчитать квартили Value для каждого CustomerID, а затем добавить его обратно в исходный набор данных для каждого CustomerID.

Я знаю, что могу сделать это, рассчитав квартили отдельно, запустив groupby, а затем с помощью функции quantile и затем объединяя значения в исходный набор данных, и выполнив команды if-else, но есть ли способ Трубопровод этот запрос?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Использование:

s = df.query('Month == 1').groupby('Customer ID')['Month'].quantile()
df['new'] = df['Customer ID'].map(s)
print (df)
  Customer ID  Month  Value  new
0           a      1     10  1.0
1           a      2     20  1.0
2           a      3     20  1.0
3           b      1     30  1.0
4           b      2     40  1.0
5           c      1     80  1.0
6           c      2     90  1.0

Объяснение

  1. Первый фильтр по query
  2. Совокупный DataFrameGroupBy.quantile
  3. Создать новый столбец по map
0 голосов
/ 24 июня 2018

Это то, что вам нужно?

df['quantile.25']=df.loc[df.Month==1,'Value'].quantile(0.25)
df
Out[230]: 
  CustomerID  Month  Value  quantile.25
0          a      1     10         20.0
1          a      2     20         20.0
2          a      3     20         20.0
3          b      1     30         20.0
4          b      2     40         20.0
5          c      1     80         20.0
6          c      2     90         20.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...