Как изменить / «свергнуть» пандас - PullRequest
0 голосов
/ 12 декабря 2018

Topple, скорее всего, неправильное название для операции, которую я хочу, но я не могу придумать лучшего.

У меня есть N фреймов данных формы (100,3). Каждая строка исходного фрейма данных - это название теста и два результата, которые он выдает.Я хочу преобразовать отдельный фрейм данных в (1200) фигуру со всеми значениями тестов в виде одной строки.После этого я добавлю все N фреймов данных в один, заканчивая (N, 200) фреймом данных.

Вот пример с фиктивными данными:

import pandas as pd
import numpy as np
import random
import string

np.random.seed(42)
tests = np.random.choice(list(string.ascii_letters),size=(100,1))
results = np.random.randint(0,100,size=(100, 2))
df = pd.DataFrame(np.concatenate([tests, results], axis=1), columns=["Test Name", "ValueA", "ValueB"])
toppled_df = pd.DataFrame(np.random.randint(0,100,size=(1,5)),columns=["Z Value A", "Z ValueB", "t ValueA", "t ValueB", "..."])
toppled_df = pd.DataFrame([[44,64,88,70,"..."]],columns=["M Value A", "M ValueB", "Z ValueA", "Z ValueB", "..."])
toppled_df.head()

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018
df2 = df.set_index('Test Name').unstack()
result = pd.DataFrame(data=df2.values.reshape(1,-1), columns=df2.index)

Вывод:

>>> result
          ValueA                                                 ... ValueB                                                 
Test Name      M   Z  C  o   Q   h  u   M  s   w   k   k   x   J ...      w   N   u  p   S  r   U   x   z   y   S  O   C   o
0             44  88  8  0  87  10  7  34  4  27  72  11  32  22 ...     49  30  41  6  89  1  47  68  31  98  47  2  23  32

Вы можете получить доступ к отдельным результатам, например так:

result['ValueA', 'M']
# or
result['ValueA']['M']
0 голосов
/ 12 декабря 2018

Еще питон способ

df_out = df.set_index('Test Name').stack().to_frame().T
df_out.columns = df_out.columns.map(' '.join).str.strip()
0 голосов
/ 12 декабря 2018

Вы можете растопить df в длинный формат, объединить столбцы с именем и типом значения, а затем транспонировать его.

tests = np.random.choice(list(string.ascii_letters),size=(100,1))
results = np.random.randint(0,100,size=(100, 2))
df = pd.DataFrame(np.concatenate([tests, results], axis=1), 
                  columns=["Test Name", "ValueA", "ValueB"])

df2['key'] = df['Test Name'] + ' ' + df['variable']
df2['key'] = df2['Test Name'] + ' ' + df2['variable']
df2[['key', 'value']].set_index('key').T

Выполнить цикл по каждому фрейму данных, чтобы создать расплавленный фрейм данных, а затем объединить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...