групповое объединение панд на основе условия

#python #pandas #group-by

#питон #панды #группа-по

Вопрос:

У меня есть фрейм данных, как показано ниже, и я пытаюсь объединить имена, когда класс не пуст,

 Name class score kumar "" "" ram 10 14 ravi "" "" tej "" "" om 12 15  

мой желаемый результат таков,

 Name class score kumarram 10 14 ravitejom 12 15  

Я попробовал класс groupby и добавил как новую серию, но длина не совпадает,

 my code:  df['g1'] = df['class'].ne("").cumsum()  df.loc[df["class"].ne(""), "Name"] = df.groupby("g1").apply(lambda x: " ".join(x["Name"].values)  

Ответ №1:

Вы правы, чтобы найти блоки с cumsum условием отрицания. Здесь, однако, вы можете перевернуть серию перед окончанием, поэтому блоки подсчитываются снизу вверх:

 blocks = df['score'].ne('""')[::-1].cumsum() df.groupby(blocks).agg({  'Name':''.join,  'class':'last',  'score':'last' })  

Выход:

 Name class score score  1 ravitejom 12 15 2 kumarram 10 14