Pandas: как использовать (df.groupby) в лямбда-формуле - PullRequest
1 голос
/ 01 мая 2020

Пример ниже:

import pandas as pd
list1 = ['a','a','a','b','b','b','b','c','c','c']
list2 = range(len(list1))
df = pd.DataFrame(zip(list1, list2), columns=  ['Item','Value'])
df

дает:

enter image description here

обязательно: столбец GroupFirstValue, как показано ниже.

enter image description here

Идея состоит в том, чтобы использовать лямбда-формулу для получения «первого» значения для каждой группы. Например, первое значение «а» равно 0, Первое значение "b" равно 3, первое значение "c" равно 7. Вот почему эти цифры появляются в столбце GroupFirstValue.

Примечание. Я знаю, что могу сделать это в 2 этапа ... один является исходным df, а второй - сгруппированным по df и затем объединяет их вместе. Идея состоит в том, чтобы увидеть, можно ли сделать это более эффективно за один шаг. Большое спасибо заранее!

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Используйте mask и duplicated

df['GroupFirstValue'] = df.Value.mask(df.Item.duplicated())

Out[109]:
  Item  Value  GroupFirstValue
0    a      0              0.0
1    a      1              NaN
2    a      2              NaN
3    b      3              3.0
4    b      4              NaN
5    b      5              NaN
6    b      6              NaN
7    c      7              7.0
8    c      8              NaN
9    c      9              NaN
1 голос
/ 01 мая 2020

groupby и используйте сначала

df.groupby('Item')['Value'].first()

или вы можете использовать преобразование и назначить новый столбец в вашем кадре

df['new_col'] = df.groupby('Item')['Value'].transform('first')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...