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

Я попробовал ссылку .Но это не работает для моего примера, приведенного ниже.Я попытался loc [0] для вывода.Я попробовал .item ().Но ничто из этого не помогает мне.

>>> df2 = pd.DataFrame({ 'Item':['[Phone]', '[Watch]', '[Pen]', '[Pencil]', '[Knife]'], 'RelatedItem': ['[Phone cover]', '[Watch strap]', '[Pen cap]', '[Pencil lead]', '[fork]'], 'CountinInventory':['20','50','40','80','90']})
>>> df2
    Item     RelatedItem   CountinInventory
0   [Phone]  [Phone cover]               20
1   [Watch]  [Watch strap]               50
2     [Pen]      [Pen cap]               40
3  [Pencil]  [Pencil lead]               80
4   [Knife]         [fork]               90
>>> df2.loc[df2['Item'] == 'Phone', 'RelatedItem']
Series([], Name: RelatedItem, dtype: object)
>>> df2.loc[df2['Item'] == 'Phone', 'RelatedItem', 'CountinInventory']
pandas.core.indexing.IndexingError: Too many indexers

У меня есть эти данные, где, когда я кормлю Phone, мне нужно получить Phone cover вместе со значением CountinInventory в качестве ответа.Пожалуйста, посоветуйте, какую ошибку я здесь делаю.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы также можете использовать:

df.loc[df['Item'].str.contains('Phone'), ['RelatedItem',  'CountinInventory']]

Ошибка too many indexers связана с тем, что df.loc [] ожидает массив меток, список или фрагмент с объектом с метками.Но вы дали последовательность «меток».

0 голосов
/ 10 октября 2018

Полагаю, вам нужно str для удаления первого и последнего [] или использования str.strip:

mask = df2['Item'].str[1:-1] == 'Phone'
#alternative solution
#mask = df2['Item'].str.strip('[]') == 'Phone'

print (mask)
0     True
1    False
2    False
3    False
4    False
Name: Item, dtype: bool

Если пропущенные значения невозможны, используйте list comprehension,что быстрее, если большие данные:

mask = [x[1:-1] == 'Phone'for x in df2['Item']]

mask = [x.strip('[]') == 'Phone'for x in df2['Item']]
print (mask)

[True, False, False, False, False]

Последний для выбора нескольких столбцов использовать list:

df3 = df2.loc[mask, ['RelatedItem', 'CountinInventory']]
print (df3)
     RelatedItem CountinInventory
0  [Phone cover]               20
...