我目前在此配置中有一个pandas数据框
some-file-2.54.jar
我想在此配置中有一个数据框
col_1 col_2 col_3 col_4
0 fish 50g 3 £5
1 cheese 50g 4 £6
2 fish 100g 2 £20
3 fish 200g 2 £25
4 bread 50g 15 £50
. ... ... ... ...
我查看了the pandas website处的文档,我得出的结论是我需要使用pd.MultiIndex构造函数。
但是,无论我尝试使用 col_3 col_4
fish 50g 3 £5
100g 2 £20
200g 2 £25
cheese 50g 4 £6
bread 50g 15 £50
... ... ... ...
的哪种变体,我都不会得到pd.MultiIndex.constructor(df[["col_1","col_2"]])
对象,当我尝试将其用作m_index
我做错了什么?
答案 0 :(得分:1)
我认为您可以使用set_index
然后使用sort_index
,但为了正确排序,必须从g
列删除最后一个字符col_2
并按astype
投弃到int
(或float
)。最后,您可以添加g
并创建新的MultiIndex
from_tuples
:
df['col_2'] = df['col_2'].str[:-1].astype(int)
print df.set_index(['col_1','col_2'])
col_3 col_4
col_1 col_2
fish 50 3 5
cheese 50 4 6
fish 100 2 20
200 2 25
bread 50 15 50
print df.set_index(['col_1','col_2'])
.sort_index(level=['col_1','col_2'], ascending=[False,True])
col_3 col_4
col_1 col_2
fish 50 3 5
100 2 20
200 2 25
cheese 50 4 6
bread 50 15 50
df1 = df.set_index(['col_1','col_2'])
.sort_index(level=['col_1','col_2'], ascending=[False,True])
col_3 col_4
col_1 col_2
fish 50 3 5
cheese 50 4 6
fish 100 2 20
200 2 25
bread 50 15 50
#change multiindex
new_index = zip(df1.index.get_level_values('col_1'),
df1.index.get_level_values('col_2').astype(str) + 'g')
df1.index = pd.MultiIndex.from_tuples(new_index, names = df1.index.names)
print df1
col_3 col_4
col_1 col_2
fish 50g 3 5
100g 2 20
200g 2 25
cheese 50g 4 6
bread 50g 15 50