Получить набор уникальных значений после объединения float64 и integer64 - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь сгруппировать и агрегировать df, состоящий из object, float64 и int64

(example df)
Number    Day        Colour   City    ... 
123       Monday     Red      London  ...
234       Monday     Blue     Paris   ...
234       Wednesday  Yellow   Paris   ...
345       Tuesday    Green    Berlin  ...

, создать новый df, подобный этому

Number    Day                Colour        City    ...
123       Monday             Red           London  ...
234       Monday, Wednesday  Blue, Yellow  Paris   ...
345       Tuesday            Green         Berlin  ...

Сначала я попытался

df.groupby('Number').agg(lambda s: ', '.join({*s}))

Однако .join не обрабатывает int64 и float64 хорошо и приводит к потере столбцов.

df = df.groupby('Number', as_index=False).agg(lambda x: ', '.join([str(i) for i in x])) решает проблему объединения float64 и int64, но приводит к этому

Number    Day                Colour        City           ...
123       Monday             Red           London         ...
234       Monday, Wednesday  Blue, Yellow  Paris, Paris   ...
345       Tuesday            Green         Berlin         ...

Есть ли способ получить набор уникальных значений ({*s}) и объединиться при работе с числами с плавающей запятой и целыми числами? Чего я не хочу, так это повторяющихся строк, в которых были объединены строки (например, Париж, Париж).

1 Ответ

1 голос
/ 17 февраля 2020

Давайте использовать unique

df.groupby('Number').agg(lambda s: ', '.join(s.unique().astype(str)))
...