Как я могу использовать панды, чтобы установить значение для всех строк, которые соответствуют части индекса нескольких частей - PullRequest
0 голосов
/ 12 июня 2018

У меня есть следующий pandas dataframe:

>>> import pandas
>>> indexes = [['a', 'a', 'c', 'd', 'd', '1'], ['1', '1', '3', '4', '5', '6']]
>>> pandas.DataFrame(index=indexes, columns=["Year", "Color", "Manufacturer"])
    Year Color Manufacturer
a 1  NaN   NaN          NaN
  1  NaN   NaN          NaN
c 3  NaN   NaN          NaN
d 4  NaN   NaN          NaN
  5  NaN   NaN          NaN
1 6  NaN   NaN          NaN

Какую команду я могу использовать, чтобы установить для столбца «Производитель» значение «Manf X» во всех строках, в которых «1» означает их второе значение индекса?Я попробовал следующие команды, но мне не очень повезло:

set_value((,'1'), "Manufacturer", "Manf X")
set_value((:,'1'), "Manufacturer", "Manf X")

Похоже, я могу использовать аналогичную команду для установки столбца во всех строках, которые имеют 1 для их первого значения индекса, но япросто не могу заставить его работать, когда я ищу совпадение по второму значению индекса.

set_value(('1',), "Manufacturer", "Manf X")

1 Ответ

0 голосов
/ 12 июня 2018

В одну сторону, используя слайсеры :

import pandas as pd
indexes = [['a', 'a', 'c', 'd', 'd', '1'], ['1', '1', '3', '4', '5', '6']]
df = pd.DataFrame(index=indexes, columns=["Year", "Color", "Manufacturer"])

df.sort_index(inplace=True)
print(df)
df.loc[pd.IndexSlice[:, '1'], ["Manufacturer"]] = "SomeManufacturer"
print(df)

До:

    Year Color Manufacturer
1 6  NaN   NaN          NaN
a 1  NaN   NaN          NaN
  1  NaN   NaN          NaN
c 3  NaN   NaN          NaN
d 4  NaN   NaN          NaN
  5  NaN   NaN          NaN

После:

    Year Color      Manufacturer
1 6  NaN   NaN               NaN
a 1  NaN   NaN  SomeManufacturer
  1  NaN   NaN  SomeManufacturer
c 3  NaN   NaN               NaN
d 4  NaN   NaN               NaN
  5  NaN   NaN               NaN

(сортировка по индексутребуется. Без сортировки :)

UnsortedIndexError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...