Создать фрейм данных с несколькими заголовками на столбец и заполнить фрейм данных в цикле - PullRequest
0 голосов
/ 06 октября 2018

Я хочу создать фрейм данных Pandas с несколькими заголовками на столбец и заполнять фрейм данных построчно данными в цикле.Я создавал кадры данных раньше, но это кажется очень сложным для того, что я действительно хочу сделать, и я не знаю, с чего начать.

Пример:

step = list(range(1,5))
    for i in step:
        time = -2
        for j in range(0,5): # Time goes from -2 to 2
            one = time*0.5
            two = time*0.4
            score = one + two
            # Code populate dataframe with column time for one and two sub columns, 
            # and the score for the score column
            time += 1
        print("step %s " % i)

Изображение того, как этот кадр данныхдолжен выглядеть Dataframe

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Хотя jpp уже ответил на большую часть части, я замечаю, что есть другая оценка;колонка, которую вы хотите.

arrays= [['score', -2, -2, -1, -1, 0, 0, 1, 1, 2 ,2, 'score'],
        [None, 'one', 'two', 'one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]

tuples = list(zip(*arrays))
columns = pd.MultiIndex.from_tuples(tuples, names = ['time', None ])
df = pd.DataFrame(index = ['Step 1', 'Step 2', 'Step 3', 'Step 4', 'Step 5'], columns=columns)
df
time    score     -2          -1           0           1           2
        NaN      one   two    one   two   one   two   one   two   one   two
Step 1  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
Step 2  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
Step 3  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
Step 4  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN
Step 5  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN

Это похоже на взлом

0 голосов
/ 06 октября 2018

Вы можете использовать конструктор pd.DataFrame, указав index и columns.Важным моментом является использование MultiIndex столбцов:

idx = pd.Index([f'step {i}' for i in range(1, 5)], name='time')
cols = pd.MultiIndex.from_tuples([(i, j) for i in range(-2, 3) for j in ('one', 'two')])

df = pd.DataFrame(index=idx, columns=cols)

Затем можно заполнить значение с помощью pd.DataFrame.at для быстрой скалярной настройки по метке:

df.at['step 1', (-2, 'two')] = 2
df.at['step 3', (0, 'one')] = 5

print(df)

         -2        -1         0         1         2     
        one  two  one  two  one  two  one  two  one  two
time                                                    
step 1  NaN    2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
step 2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
step 3  NaN  NaN  NaN  NaN    5  NaN  NaN  NaN  NaN  NaN
step 4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...