Как добавить индекс фрейма данных путем объединения массива в pandas? - PullRequest
4 голосов
/ 20 июня 2020

Пример

df:

   col_a  col_b 
a   2      3
b   4      4
c   3      2

array: np.array([c,d,e])

Ожидаемый

Массив объединяет индекс фрейма данных, он возвращает фрейм данных следующим образом:

   col_a  col_b 
a   2      3
b   4      4
c   3      2
d   NaN    NaN
e   NaN    NaN

Попробуйте

Я использую pd.concat([pd.Series(array),df],axis=1), но не удалось. Как мне его получить?

Ответы [ 5 ]

2 голосов
/ 20 июня 2020

Вы можете использовать pd.Index.union с df.reindex

a = np.array(['c', 'd', 'e'])
df.reindex(df.index.union(a),axis=0)
   col_a  col_b
a    2.0    3.0
b    4.0    4.0
c    3.0    2.0
d    NaN    NaN
e    NaN    NaN
2 голосов
/ 20 июня 2020

Вместо использования pd.concat можно использовать DataFrame.combine_first:

a = np.array(['c', 'd', 'e'])
df = df.combine_first(pd.DataFrame(index=a))
.
# print(df)

   col_a  col_b
a    2.0    3.0
b    4.0    4.0
c    3.0    2.0
d    NaN    NaN
e    NaN    NaN
1 голос
/ 20 июня 2020

Вы можете использовать numpy.union1d например

idx = np.array(['c','d','e'])

df = df.reindex(np.union1d(df.index, idx))
df
   col_a  col_b
a    2.0    3.0
b    4.0    4.0
c    3.0    2.0
d    NaN    NaN
e    NaN    NaN
0 голосов
/ 20 июня 2020

Еще один способ:

a = np.array(["c","d","e"])

df.reindex(set(df.index).union(a)).sort_index()

Результат:

   col_a  col_b
a    2.0    3.0
b    4.0    4.0
c    3.0    2.0
d    NaN    NaN
e    NaN    NaN
0 голосов
/ 20 июня 2020

Учитывая пример данных:

import pandas as pd
data = {'col_a': [2,4,3], 'col_b': [3,4,2]}
index = ['a', 'b', 'c']
df = pd.DataFrame(data, index)

Этот фрагмент кода делает то, что вам нужно:

df = df.append(pd.Series(name='d'))
df = df.append(pd.Series(name='e'))

Со следующим выводом:

df
a   2.0     3.0
b   4.0     4.0
c   3.0     2.0
d   NaN     NaN
e   NaN     NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...