Reputation: 1928
I would like to create an empty dataframe with multiindexes columns with Pandas, and then fill values later on. How could I do that ?
In this example I can create the dataframe but can't assign value to it with .loc
.
segment = 'segment_1'
tuples = [(segment, 'market', 'symbol'),
(segment, 'market', 'base'),
(segment, 'market', 'quote'),
(segment, 'market', 'wallet'),
(segment, 'market', 'type'),
(segment, 'market', 'margined'),
(segment, 'market', 'derivative'),
(segment, 'funds', 'wallet'),
(segment, 'funds', 'code'),
(segment, 'type', 'action'),
(segment, 'type', 'transfer'),
(segment, 'type', 'priority'),
]
index = pd.MultiIndex.from_tuples(tuples, names=["level_1", "level_2", 'level_3'])
df = pd.DataFrame(columns=index)
df.loc[:, ('segment_1', 'market', 'symbol')] = 1
df
level_1 segment_1
level_2 market funds type
level_3 symbol base quote wallet type margined derivative wallet code action transfer priority
As you can it's not possible to set value to this dataframe. What is the reason for this ? do I need to create an index first ?
Upvotes: 0
Views: 121
Reputation: 862681
There is used :
in loc
for select all rows, but because rows not exist is not set value. So solution is set index label like 0
here:
df.loc[0, ('segment_1', 'market', 'symbol')] = 1
print (df)
level_1 segment_1 \
level_2 market funds
level_3 symbol base quote wallet type margined derivative wallet code
0 1 NaN NaN NaN NaN NaN NaN NaN NaN
level_1
level_2 type
level_3 action transfer priority
0 NaN NaN NaN
Upvotes: 1