Как получить набор уникальных индексов из индексов двух фреймов?
Есть df1 и df2. У df1 индексы 1,2,3,4,5,6,7, у df2 - индексы 1,2,3,8.
Как из двух наборов индексов получить один, который включает в себя как индексы первого датафрейма, так и второго без дубликатов? Т.е., df0 с индексами 1,2,3,4,5,6,7,8?
Пробовала так:
df0 = pd.concat([df1, df2], keys=['First', 'Second'], sort=False)
df0.groupby('Index').sum()
Здесь я использовала sum(), но по сути не имеет значение какую функцию использовать, так как в дальнейшем будут использованы только индексы. Но почему-то этот способ не работает. У меня сокращается общий набор индексов.
Ответы (2 шт):
решение для приведенного в вопросе примера данных:
In [8]: df1 = pd.DataFrame(index=[1,2,3,4,5,6,7])
In [9]: df2 = pd.DataFrame(index=[1,2,3,8])
In [10]: df0_index = df1.index.union(df2.index)
In [11]: df0_index
Out[11]: Int64Index([1, 2, 3, 4, 5, 6, 7, 8], dtype='int64')
Чтобы найти отличия в значениях индексов двух фреймов можно воспользоваться методом pd.Index.difference():
In [33]: df1.index.difference(df2.index)
Out[33]:
Index(['Инвестиционные проекты, реализация которых обуславливается схемами и программами перспективного развития электроэнергетики, всего',
'Москва',
'Покупка земельных участков для целей реализации инвестиционных проектов, всего',
'Прочее новое строительство объектов электросетевого хозяйства, всего',
'Прочие инвестиционные проекты, всего',
'Технологическое присоединение льготной категории потребителей (мощностью до 15 кВт)',
'Технологическое присоединение энергопринимающих устройств потребителей максимальной мощностью до 15 кВт включительно, всего',
'Технологическое присоединение энергопринимающих устройств потребителей, всего, в том числе:',
'Технологическое присоединение, всего, в том числе:'],
dtype='object')
In [34]: df2.index.difference(df1.index)
Out[34]: Index(['Index', 'Моя строка'], dtype='object')
или так чтобы найти все значения, которые не встречаются в обоих индексах:
In [35]: df1.index.union(df2.index).difference(df1.index.intersection(df2.index))
Out[35]:
Index(['Index',
'Инвестиционные проекты, реализация которых обуславливается схемами и программами перспективного развития электроэнергетики, всего',
'Москва', 'Моя строка',
'Покупка земельных участков для целей реализации инвестиционных проектов, всего',
'Прочее новое строительство объектов электросетевого хозяйства, всего',
'Прочие инвестиционные проекты, всего',
'Технологическое присоединение льготной категории потребителей (мощностью до 15 кВт)',
'Технологическое присоединение энергопринимающих устройств потребителей максимальной мощностью до 15 кВт включительно, всего',
'Технологическое присоединение энергопринимающих устройств потребителей, всего, в том числе:',
'Технологическое присоединение, всего, в том числе:'],
dtype='object')