#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть 2 таблицы (фреймы данных), в каждой по 2 столбца. Допустим M1["a1","b1"]
, и M2["a2","b2"]
. (M1 и M2 на самом деле относятся к одному и тому же csv. Я просто описываю их как две таблицы из-за функции G ниже.)
У меня также есть функция G = a1*b1*a2*b2 a1*b1
. Просто чтобы сделать мой вопрос более понятным, я бы написал function G
as G(n,m) = a1(n)*b1(n)*a2(m)*b2(m) a1(n)*b1(n)
и хотел бы упомянуть, что (a1[n],b1[n]) всегда входят в фиксированную пару, т. Е. Нет (a1[3], b1[5]) .
Позже я хочу построить эту функцию G
n
, которая соответствует оси x и m
соответствует оси y. Само значение G
будет соответствовать оси z. Конечная цель — найти, какое (a,b) pair
из них дает минимальное значение G
, если таковое имеется.
Как я должен написать функцию G на python?
Написание следующего просто выдает ошибку.
for n in a1,b1:
for m in a2,b2:
G = a1*b1*a2*b2 a1*b1 #works, but the result consists only 1 column
G[:,:] = a1[n]*b1[n]*a2[m]*b2[m] a1[n]*b1[n] #error
print(G)
Я использовал более простые имена переменных выше, чтобы упростить сообщение.
Вот мой реальный код.
NMOS_gm_gmid = pandas.read_csv('NMOS_gm_gmid.csv', sep=',' , encoding='UTF-8')
NMOS_gm_gmid = NMOS_gm_gmid.apply(pandas.to_numeric, errors='coerce')
NMOS_ro_gmid = pandas.read_csv('NMOS_ro_gmid.csv', sep=',' , encoding='UTF-8')
NMOS_ro_gmid = NMOS_ro_gmid.apply(pandas.to_numeric, errors='coerce')
gm1 = NMOS_gm_gmid.iloc[:10,2]
ro1 = 1 / NMOS_ro_gmid.iloc[:10,2] * 1e6
gm2 = NMOS_gm_gmid.iloc[:10,2]
ro2 = 1 / NMOS_ro_gmid.iloc[:10,2] * 1e6
Gm = gm1*ro1*gm2*ro2 gm1*ro1
Ответ №1:
Вы можете использовать numpy broadcast здесь:
# M1, M2 from the same dataframe:
a1,b1,a2,b2 = df[['a1','b1','a2','b2']].to_numpy().T
G = (a1 * b1 1) * (a2*b2)[:,None]
Комментарии:
1. возникает эта ошибка:
KeyError: "['a1' 'b1' 'a2' 'b2'] not in index"
2. Это вытекает из вашего вопроса, скажем, M1 [«a1″,»b1»] и M2 [«a2″,»b2»]. (M1 и M2 фактически относятся к одному и тому же csv) . Если вы получаете ошибку ключа, то я не уверен, что вы имели в виду под этим.
3. Хм … M1 и M2 — это имя таблицы. a # и b # — это имена столбцов. Извините, если я не понял. Я новичок в этом.
4. Да, и я не понимаю, почему вы говорите, что M1 и M2 относятся к одному и тому же csv . В любом случае, разделите их
a1,b1 = M1[['a1','b1']].to_numpy().T
и то же самое дляa2,b2
.5. хм … у меня та же ошибка:
KeyError: "['a1' 'b1'] not in index"
я поместил свой реальный код в свой пост, может быть, вы хотели бы взглянуть.