объединение фреймов данных python pandas объединяет список в индекс

#python #pandas #list #indexing #union

#python #pandas #Список #индексирование #объединение

Вопрос:

У меня есть список значений, и я хочу гарантировать, что все значения существуют в индексе фрейма данных.

Я достиг этого, используя следующее, но хочу знать, могу ли я сделать это более простым способом? Я пробовал различные ~ ... .isin конструкции, но не смог получить то, что хочу, спасибо

 #df1 is my data frame 
df1=pd.DataFrame({'i':[1, 3, 5, 7], 
                 'a':[2, 4, 6, 8]})
df1.set_index(['i'], inplace=True)
df1
 

введите описание изображения здесь

 # l is the list containing index values
# i make this a data frame with an index but no columns so i can use merge
l=[3, 4, 5]
df=pd.DataFrame(l)
df.set_index([0], inplace=True)
df.index.names=['i']
df
 

введите описание изображения здесь

Используйте слияние для добавления любых отсутствующих значений индекса

 df1.merge(df, how='outer', on='i', sort=True)
 

введите описание изображения здесь

Ответ №1:

Используйте reindex вместе с pd.Index.union (при условии, что у вас нет повторяющихся значений для индекса фрейма данных или дубликатов в l )

 import pandas as pd

df1 = pd.DataFrame({'i':[1, 3, 5, 7], 'a':[2, 4, 6, 8]}).set_index('i')
l = [3, 4, 5]
 

 df1 = df1.reindex(df1.index.union(l))
#     a
#i     
#1  2.0
#3  4.0
#4  NaN
#5  6.0
#7  8.0
 

Комментарии:

1. Спасибо, что нашли время @ALollz — panda cub здесь

2. Нет проблем! Все может немного усложниться, если вам нужно иметь дело с дубликатами, потому что тогда вам нужно решить, хотите ли вы, чтобы эти строки мультипликативно росли, но если вы уверены, что в конце концов вам нужен не дублирующийся индекс, это будет хорошо работать.

3. я не знал, что index.union() может принимать список, я предположил, что его нужно сначала преобразовать pd.Index(l) . Это полезно знать.

4. @rhug123 да, многие методы pandas довольно гибкие, поскольку они принимают большинство входных данных, похожих на массивы, в этом случае он будет принимать list , set , np.array , pd.Series , tuple , и несколько других, я уверен, что я не учитываю