Заполнение пустого фрейма данных с помощью присваивания путем выбора местоположения с помощью индексов кортежей - PullRequest
0 голосов
/ 10 мая 2018

Почему это работает?

a=pd.DataFrame()
a.loc[1,2]=0

>
     2
1  0.0

А это не работает?

a=pd.DataFrame()
a.loc[(1,2),2]=0
>
KeyError: '[1 2] not in index'

Последнее - это то, что я хотел бы сделать. Я буду заполнять значения путем присваивания через выбор loc с указанным кортежем из индекса, без данных, 0 строк, 0 столбцов.

Ответы [ 2 ]

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

Мне нравится Ответ Жюльена , так как это менее похоже на магию. Все это попытки установить 2-х уровневый мультииндекс.

set_index с пустыми массивами

i = np.array([])
a = pd.DataFrame().set_index([i, i])
a.loc[(1, 2), 2] = 0

a

           2
1.0 2.0  0.0

чуть более лаконично

a = pd.DataFrame().set_index([np.array([])] * 2)
a.loc[(1, 2), 2] = 0

pd.concat

a = pd.concat([pd.DataFrame()] * 2, keys=[1, 2])
a.loc[(1, 2), 2] = 0

a

       2
1 2  0.0
0 голосов
/ 10 мая 2018

Использование кортежа в качестве индекса будет работать, если ваш фрейм данных уже имеет мультииндекс:

import pandas as pd

# Define multi-index
index = pd.MultiIndex.from_product([[],[]], names=['first', 'second'])
# or
# index = pd.MultiIndex.from_tuples([], names=['first', 'second']) 

a = pd.DataFrame(index=index)
a.loc[(1,2), 2]=0

#                 2
# first second     
# 1.0   2.0     0.0
...