In Python, set value multiindex Pandas -
i'm newbie both python , pandas.
i trying construct dataframe, , later populate values.
i have constructed dataframe
from pandas import * agemin = 21 agemax = 31 agestep = 2 bins_sumins = [0, 10000, 20000] bins_age = list(range(agemin, agemax, agestep)) indeks_sex = ['m', 'f'] indeks_age = ['[{0}-{1})'.format(bins_age[i-1], bins_age[i]) in range(1, len(bins_age))] indeks_sumins = ['[{0}-{1})'.format(bins_sumins[i-1], bins_sumins[i]) in range(1, len(bins_sumins))] indeks = multiindex.from_product([indeks_age , indeks_sex ,indeks_sumins], names=['age', 'sex', 'sumins']) cols = ['a', 'b', 'c', 'd'] df = dataframe(data = 0, index = indeks, columns = cols) so far well. able assign value whole set of values
>>> df['a']['[21-23)']['m'] = 1 >>> df b c d age sex sumins [21-23) m [0-10000) 1 0 0 0 [10000-20000) 1 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [23-25) m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [25-27) m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [27-29) m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 however, setting value of 1 position no go...
>>> df['b']['[21-23)']['m']['[10000-20000)'] = 2 >>> df b c d age sex sumins [21-23) m [0-10000) 1 0 0 0 [10000-20000) 1 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [23-25) m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [25-27) m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [27-29) m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [16 rows x 4 columns] what going on here? open idea have misunderstood how multiindexing works. anyone?
first off, have @ docs on chained indexing
second, read needing sort multiindices.
that solution:
in [46]: df = df.sort_index() in [47]: df.loc['[21-23)', 'm', '[10000-20000)'] = 2 in [48]: df out[48]: b c d age sex sumins [21-23) f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 m [0-10000) 0 0 0 0 [10000-20000) 2 2 2 2 [23-25) f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [25-27) f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [27-29) f [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 m [0-10000) 0 0 0 0 [10000-20000) 0 0 0 0 [16 rows x 4 columns] pandas .14 have additional ways slicing multiindex.
Comments
Post a Comment