Выберите уникальные значения столбца с условием нескольких столбцов

avatar
Harry Jones
9 августа 2021 в 00:31
354
2
2

У меня есть кадр данных, в котором есть несколько строк с отсутствующими данными, но есть строки, которые заполнены и совпадают с теми, в которых отсутствуют данные. Я хотел бы, чтобы мой фрейм данных имел только полный идентификатор, но не исключал тех, у которых нет никакой информации. Например, среди этих одинаковых ID какие содержат больше информации с учетом TYPE.

Ввод:

      ID   TYPE   HEIGHT   KG 
 -----------------------------
    MEXU    DOL     NaN    40
    RFGT    DOL     140    47
    RFGT    DOL     NaN   NaN
    RFGT    RET      90   NaN
    OJKU    NaN     NaN   NaN
    TYED    NaN     NaN    80
    TYED    NaN     100    80
    TYED    DOL     100    80
    PJLO    RET     NaN   NaN
    PJLO    DOL     NaN   NaN
    BUAR    NaN     NaN   NaN

Должен ли я использовать какой-то groupby или agg в пандах?

Ожидаемый результат:

      ID   TYPE   HEIGHT   KG 
    -----------------------------
    MEXU    DOL     NaN    40
    RFGT    DOL     140    47
    RFGT    RET      90   NaN
    OJKU    NaN     NaN   NaN
    TYED    DOL     100    80
    PJLO    RET     NaN   NaN
    PJLO    DOL     NaN   NaN
    BUAR    NaN     NaN   NaN
Источник
Xitiz
9 августа 2021 в 00:48
1

Условия? Что вы устали до сих пор? В чем проблема для вас? Что вы обнаружили, изучая свою проблему? Добавьте все, что в вопросе!

Henry Ecker
9 августа 2021 в 01:08
1

Разве это не просто df.groupby('ID', as_index=False).first()?

suvayu
9 августа 2021 в 01:14
5

Вы просите других сделать работу за вас, не показывая никаких собственных попыток.

Ответы (2)

avatar
Joe Thor
9 августа 2021 в 01:31
1

Используйте функцию groupby.first.

Я попытался реплицировать данные, но сделал это только для первых нескольких строк.

import pandas as pd

source = {'ID': ['MEXU ','RFGT','RFGT', 'OJKU', 'TYED'], 'TYPE': ['DOL','DOL','DOL', 'RET', 'NaN'], 'HEIGHT': ['NaN', 140, 'NaN', 90, 'NaN'], 'KG': [40, 47, 'NaN', 'NaN', 'NaN']}

df = pd.DataFrame(data=source)


grouped = df.groupby('ID', as_index=False).first()

print(grouped)

отпечатки


      ID TYPE HEIGHT   KG
0   MEXU  DOL    NaN   40
1   OJKU  RET     90  NaN
2   RFGT  DOL    140   47
3   TYED  NaN    NaN  NaN

avatar
Scott Boston
9 августа 2021 в 01:30
1

Попробуйте drop_duplicates:

df.drop_duplicates(['ID', 'TYPE'])

Вывод:

      ID TYPE  HEIGHT    KG
0   MEXU  DOL     NaN  40.0
1   RFGT  DOL   140.0  47.0
3   RFGT  RET    90.0   NaN
4   OJKU  NaN     NaN   NaN
5   TYED  NaN     NaN  80.0
7   TYED  DOL   100.0  80.0
8   PJLO  RET     NaN   NaN
9   PJLO  DOL     NaN   NaN
10  BUAR  NaN     NaN   NaN