Вы можете использовать groupby
вдоль axis=1
:
type_dct = {str(k): list(v) for k, v in df.groupby(df.dtypes, axis=1)}
Для вашего образца данных это дает:
{'int64': [0, 1, 2, 3, 7],
'float64': [8, 9, 10, 14, 15],
'object': [4, 5, 6, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22]}
Примечание: неттакая вещь как string
серия dtype
с пандами.object
dtype представляет указатели на произвольные объекты Python, включая строки.Смотрите Строки в DataFrame, но dtype это объект для получения более подробной информации.