как получить размеры формы (м, н) из (м,)

В качестве альтернативы можно полагаться на декартово произведение, предоставляемое itertools: itertools.product, что позволяет избежать создания временного ключа или изменения индекса:

import numpy as np 
import pandas as pd 
import itertools

def cartesian(df1, df2):
    rows = itertools.product(df1.iterrows(), df2.iterrows())

    df = pd.DataFrame(left.append(right) for (_, left), (_, right) in rows)
    return df.reset_index(drop=True)

Быстрая проверка:

In [46]: a = pd.DataFrame(np.random.rand(5, 3), columns=["a", "b", "c"])

In [47]: b = pd.DataFrame(np.random.rand(5, 3), columns=["d", "e", "f"])    

In [48]: cartesian(a,b)
Out[48]:
           a         b         c         d         e         f
0   0.436480  0.068491  0.260292  0.991311  0.064167  0.715142
1   0.436480  0.068491  0.260292  0.101777  0.840464  0.760616
2   0.436480  0.068491  0.260292  0.655391  0.289537  0.391893
3   0.436480  0.068491  0.260292  0.383729  0.061811  0.773627
4   0.436480  0.068491  0.260292  0.575711  0.995151  0.804567
5   0.469578  0.052932  0.633394  0.991311  0.064167  0.715142
6   0.469578  0.052932  0.633394  0.101777  0.840464  0.760616
7   0.469578  0.052932  0.633394  0.655391  0.289537  0.391893
8   0.469578  0.052932  0.633394  0.383729  0.061811  0.773627
9   0.469578  0.052932  0.633394  0.575711  0.995151  0.804567
10  0.466813  0.224062  0.218994  0.991311  0.064167  0.715142
11  0.466813  0.224062  0.218994  0.101777  0.840464  0.760616
12  0.466813  0.224062  0.218994  0.655391  0.289537  0.391893
13  0.466813  0.224062  0.218994  0.383729  0.061811  0.773627
14  0.466813  0.224062  0.218994  0.575711  0.995151  0.804567
15  0.831365  0.273890  0.130410  0.991311  0.064167  0.715142
16  0.831365  0.273890  0.130410  0.101777  0.840464  0.760616
17  0.831365  0.273890  0.130410  0.655391  0.289537  0.391893
18  0.831365  0.273890  0.130410  0.383729  0.061811  0.773627
19  0.831365  0.273890  0.130410  0.575711  0.995151  0.804567
20  0.447640  0.848283  0.627224  0.991311  0.064167  0.715142
21  0.447640  0.848283  0.627224  0.101777  0.840464  0.760616
22  0.447640  0.848283  0.627224  0.655391  0.289537  0.391893
23  0.447640  0.848283  0.627224  0.383729  0.061811  0.773627
24  0.447640  0.848283  0.627224  0.575711  0.995151  0.804567
0
задан Roman Patutin 26 February 2019 в 12:06
поделиться

2 ответа

Когда вы обращаетесь к столбцу DataFrame, вы берете одномерный вектор размера #rows. Если вы хотите иметь второе измерение 1 для каждого элемента, например, вместо [1, 2, 3, 4] вы хотите [[1], [2], [3], [4]], приведите его к NumPy ndarray с атрибутом .values, а затем измените его на размер (-1, 1).

df = pd.DataFrame([1,2,3,4], columns=['C'])
col_c_1 = df['C'].values         # Shape (4,)
col_c_2 = col_c_1.reshape(-1, 1) # Shape (4, 1)

С -1 вы говорите, чтобы заполнить первый размер измерения автоматически.

0
ответ дан JosepJoestar 26 February 2019 в 12:06
поделиться

Результаты очевидны, так как (m, 1) и (m,) одинаковы, поскольку вектор с одним столбцом может быть представлен с одним измерением в качестве результата, который вы получаете.

>>> import numpy as np
>>> a=[1,2,3,4,5]
>>> s=np.array(a)
>>> s
array([1, 2, 3, 4, 5])
>>> s.shape
(5,)
0
ответ дан Akshay.N 26 February 2019 в 12:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: