Присвоить столбец pandas.DataFrame серии с именем по умолчанию - PullRequest
0 голосов
/ 02 июля 2018

Предположим, у меня есть DataFrame

df = pandas.DataFrame({'a': [1,2], 'b': [3,4]}, ['foo', 'bar'])

     a  b
foo  1  3
bar  2  4

И я хочу добавить столбец на основе другого Series:

s = pandas.Series({'foo': 10, 'baz': 20})

foo    10
baz    20
dtype: int64

Как назначить Series столбцу DataFrame и указать значение по умолчанию, если значение индекса DataFrame отсутствует в индексе Series?

Я ищу что-то в форме:

df['c'] = s.withDefault(42)

Что приведет к следующему кадру данных:

     a b c 
foo  1 3 10
bar  2 4 42

#Note: bar got value 42 because it's not in s

Заранее благодарим вас за внимание и ответ.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Использование map с get

get имеет аргумент, который можно использовать для указания значения по умолчанию.

df.assign(c=df.index.map(lambda x: s.get(x, 42)))

     a  b   c
foo  1  3  10
bar  2  4  42

Используйте reindex с fill_value

df.assign(c=s.reindex(df.index, fill_value=42))

     a  b   c
foo  1  3  10
bar  2  4  42
0 голосов
/ 02 июля 2018

Вам необходимо использовать объединить между df и фреймом данных, полученным из s, а затем заполнить NaN значением по умолчанию, равным 42, в вашем случае.

df['c'] = df.join(pandas.DataFrame(s, columns=['c']))['c'].fillna(42).astype(int)

Выход:

    a   b   c
foo 1   3   10
bar 2   4   42
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...