столбцы панд из другого DataFrame, если значение находится в другом столбце?

1

У меня есть pd.DataFrame, перечисляющий проволочные манометры и соответствующие им токи:

e_ref =

   wire_gauge  current
0          14       15
1          12       20
2          10       30
3           8       50
4           6       60
5           4       85
6           3      100
7           2      115

Другой DataFrame содержит списки выключателей в системе:

system =

    breakers
0         30
1         20
2         30
3         15
4         30

Мне нужно добавить столбец "проводник" в систему DataFrame из столбцов "wire_gauge" e_ref DataFrame, просмотрев значение прерывания в текущей серии e_ref.

поэтому выход будет:

    breakers  wire_gauge
0         30  10
1         20  12
2         30  10
3         15  14
4         30  10

Я продолжаю смешивать несколько ответов с другого сообщения и в настоящее время не имеет рабочего решения pandas. Я могу заставить эту работу работать с петлями python, но я чувствую, что здесь есть один

Ниже приведены типы решений, над которыми я работаю:

df.ix[df.breakers.isin(e_ref['current']), 'wire_gauge'] = e_ref['wire_gauge']

и

df['wire_gauge']=e_ref.loc[e_ref['current'] == df['breakers'] ]

Спасибо за ваше время и направление!

Теги:
pandas
dataframe

1 ответ

1

Используйте map с помощью Series созданной формы e_ref или join, но необходимые значения в столбце current в e_ref должны быть уникальными:

print (e_ref['current'].is_unique)
True

s = e_ref.set_index('current')['wire_gauge']
system['wire_gauge'] = system['breakers'].map(s)
print (system)
   breakers  wire_gauge
0        30          10
1        20          12
2        30          10
3        15          14
4        30          10

Альтернатива:

df = system.join(e_ref.set_index('current'), on='breakers')
print (df)
   breakers  wire_gauge
0        30          10
1        20          12
2        30          10
3        15          14
4        30          10
  • 0
    Я ценю варианты здесь. Оба возвращают «nan», когда я изменяю значение прерывателя на 10 (кажется, работает для всех других токов). В противном случае это выглядит хорошо. Я буду копать больше, прежде чем я приму.
  • 0
    Я думаю, что есть проблема с различными типами, проверьте это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню