Лучший способ найти первое ненулевое вхождение каждого столбца для каждого индекса? - PullRequest
1 голос
/ 25 апреля 2019

У меня есть датафрейм, который выглядит так:

ItemID    Attribute    CostGrade    RelatedTo
---------------------------------------------
01A       tya        
01A       van
01A                     03a
01A                                 03B
01A                     02i
01A       lof           
01A                     o9g oa      
01A                                 07N
02B       ova           
02B                     39b         
02B       aga
04A       val
04A                     rg0
04A                     va0
04A       hla

Как видите, для каждой строки действительно есть только 2 значения: ItemID и ненулевое значение Attribute, CostGrade или RelatedTo.

Я хочу преобразовать ItemID в уникальный индекс, чтобы каждый ItemID имел только одну строку и занимал любую (независимо от того, может ли она быть первой или последней или случайной, поскольку все они действительны и комбинация не имеет значения) ненулевых значений из каждого столбца. Желаемый результат будет выглядеть так:

ItemID    Attribute    CostGrade    RelatedTo
---------------------------------------------
01A       tya          03a          03B
02B       ova          39b          NaN
04A       hla          rg0          NaN

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Попробуйте с groupby, bfill и iloc:

df.groupby('ItemID', as_index=False).apply(lambda x: x.bfill().iloc[0])

Выход:

  ItemID Attribute CostGrade RelatedTo
0    01A       tya       03a       03B
1    02B       ova       39b       NaN
2    04A       val       rg0       NaN
0 голосов
/ 25 апреля 2019

Я думаю, что это будет делать то, что вам нужно:

# ...if it's not already really NaN, do this
#import numpy as np
#df = df.replace('', np.nan)

df.groupby('ItemID').apply(lambda x: x.fillna(method='bfill').fillna(method='ffill')).drop_duplicates(subset='ItemID')

Выполнение филны как в прямом, так и в обратном направлении должно гарантировать, что если в этой группе есть что-то, вы что-то получите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...