Умножение списка списков - PullRequest
0 голосов
/ 11 мая 2018

Предположим, что у меня есть кадр данных из двух строк и 13 столбцов.Я использовал df.itertuples () и сформировал два списка в качестве вывода

for row in test.itertuples(index = False):
    a = np.asarray(row)
    print(a)

. Предположим, что результат вышеприведенного цикла равен

Output : [1,2,3,4,5,6,7,8,9,10,11,12,13]
[14,15,16,17,18,19,20,21,22,23,24,25,26]

У меня есть еще один список, которыйимеет форму (2,) test_y = [21,24]

Я также пытался

a = test.values.tolist()
output : array([[1,2,3,4,5,6,7,8,9,10,11,12,13],
[14,15,16,17,18,19,20,21,22,23,24,25,26]])

это формирует список списков, а затем умножает test_y на результаты с ошибкой

error :operands could not be broadcast together with shapes (2,13) (2,)

Цель состоит в том, чтобы умножить список [1,2,3 ....] на 21, а другой на 24. или есть какой-нибудь способ, который проще, чем этот

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Поскольку вы уже преобразовали a в список, вы можете использовать numpy

import numpy as np
np.transpose(np.multiply(np.transpose(a),test_y))

Вывод:

[[ 21  42  63  84 105 126 147 168 189 210 231 252 273] 
 [336 360 384 408 432 456 480 504 528 552 576 600 624]]

Если вам нужно суммировать элементы, (то есть 21 + 336, 42 + 360 и т. д.), тогда транспонирование не требуется.

ans=np.multiply(np.transpose(a),test_y)

[[ 21 336]
 [ 42 360]
 [ 63 384]
 and so on...]

Нет, просто суммируйте каждый из этих отдельных списков

sum_ans=[np.sum(x) for x in ans]
#[357, 402, 447, 492, 537, 582, 627, 672, 717, 762, 807, 852, 897]
0 голосов
/ 11 мая 2018

Вы можете применить функцию к DataFrame, которая вычисляет умножение:

In: df.apply(lambda x: x*test_y)
Out: 
    0    1    2    3    4    5    6    7    8    9    10   11   12
0   21   42   63   84  105  126  147  168  189  210  231  252  273
1  336  360  384  408  432  456  480  504  528  552  576  600  624
0 голосов
/ 11 мая 2018

Так как вы помечаете pandas

df=pd.DataFrame()
df['c1']= [1,2,3,4,5,6,7,8,9,10,11,12,13] 
df['c2']=[14,15,16,17,18,19,20,21,22,23,24,25,26]
df.mul([21,24])
Out[62]: 
     c1   c2
0    21  336
1    42  360
2    63  384
3    84  408
4   105  432
5   126  456
6   147  480
7   168  504
8   189  528
9   210  552
10  231  576
11  252  600
12  273  624
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...