Несколько столбцов панд сами по себе для создания массива

Учитывая список (вектор), как это:

index    values
item 1   0.05
item 2   0.1
item 3   0.35
...
item n   0.0n

Как можно создать массив произведений каждого элемента на самого себя, чтобы ответ принимал эту форму с использованием векторизованного метода (т.е. без циклов for):

index    item 1   item 2   item 3 ...  item n
item 1   1*1      1*2      1*3    ...  1*n
item 2   2*1      2*2      
item 3   3*1      3*2     
...          
item n   n*1      n*2             ...  n*n
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
0
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте пустую трансляцию для нескольких серий друг друга:

a = df['values'].to_numpy()
i = df.index.to_numpy()
df = pd.DataFrame(a * a[:, None], index=i, columns=i)
print (df)
        item 1  item 2  item 3
item 1  0.0025   0.005  0.0175
item 2  0.0050   0.010  0.0350
item 3  0.0175   0.035  0.1225

Это выглядит очень близко к тому, что я ищу. однако я заметил, что index появляется дважды, поэтому результирующий фрейм данных является мультииндексным. возможно ли это удалить?

D.L 17.05.2022 08:56

@DL - ответ был отредактирован.

jezrael 17.05.2022 09:09

Я отметил это как принятый ответ, поскольку он полностью отвечает на вопрос.

D.L 17.05.2022 09:25
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(10, 1)), columns=list('v'))

df

введите описание изображения здесь

for i in range(1,5):
    df[f"v_{i}"]=df["v"]*i
  

df

введите описание изображения здесь

ОП нужно no for loops

jezrael 17.05.2022 09:12

это хороший ответ. Однако я избегаю циклов, так как это всегда будет медленнее, чем векторизованное решение.

D.L 17.05.2022 09:26

да ты прав, я не дочитал вопрос до конца

Mr.F.K 17.05.2022 09:28

Другие вопросы по теме