2016-03-14 3 views
0

ЯПанды скалярное произведение строк

df={'x1':[1,2,3,4], 
    'x2':[5,6,7,8], 
    'y1':[1,2,1,1], 
    'y2':[1,1,1,1], 
    } 
df=pd.DataFrame(df) 

это выглядит как

x1 x2 y1 y2 
    1 5 1 1 
    2 6 2 1 
    3 7 1 1 
    4 8 1 1 

как получить новый столбец в ДФ x1 * y1 + x2 * y2 как "внутренний продукт"? первая попытка

df['inner']=(df[['x1','x2']*df[['y1','y2']]).sum(axis=1) 

но не

должен быть легким, но как-то не могу найти простой ответ

+0

Я немного смущен, вы упоминаете «внутренний продукт» (или продукт-точка), который будет производить 2x2, но вы хотите поместить его в столбец 4x1? Вы можете уточнить это и/или показать желаемые результаты. Я подозреваю, что это не имеет никакого отношения к внутреннему продукту, но ваше упоминание об этом сбивает с толку, поскольку оно имеет очень специфическое определение того, как вы умножаете 2 матрицы. – JohnE

+0

сделать ниже помогает? –

ответ

1

Не следует ли это:

In [5]: 
df['inner']=(df['x1'] * df['y1']) + (df['x2']*df['y2']) 
df 

Out[5]: 
    x1 x2 y1 y2 inner 
0 1 5 1 1  6 
1 2 6 2 1  10 
2 3 7 1 1  10 
3 4 8 1 1  12 
2

Вы можете использовать @EdChum решение для вашего примера. Более общие:

X = df.loc[:, df.columns.str.contains('x')] 
Y = df.loc[:, df.columns.str.contains('y')] 

df['inner'] = (X.values * Y.values).sum(axis=1) 

In [24]: df 
Out[24]: 
    x1 x2 y1 y2 inner 
0 1 5 1 1  6 
1 2 6 2 1  10 
2 3 7 1 1  10 
3 4 8 1 1  12 
Смежные вопросы