Python 通过构造函数创建多索引数据帧
给定两个数组:Python 通过构造函数创建多索引数据帧,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,给定两个数组: x [('010_628', '2543677'), ('010_228', '2543677'), ('015_634', '2543677')] y array([['me', 10228955], ['me', 10228955], ['me', 10228955]], dtype=object) 目前,这段代码为我提供了一个具有元组平面索引的数据帧: df = pd.DataFrame(x, index=y, columns=['pm_c
x
[('010_628', '2543677'), ('010_228', '2543677'), ('015_634', '2543677')]
y
array([['me', 10228955],
['me', 10228955],
['me', 10228955]], dtype=object)
目前,这段代码为我提供了一个具有元组平面索引的数据帧:
df = pd.DataFrame(x, index=y, columns=['pm_code', 'sec_pm'])
df
pm_code sec_pm
(me, 10228955) 010_628 2543677
(me, 10228955) 010_228 2543677
(me, 10228955) 015_634 2543677
我怎样才能创建一个像这样的多索引
数据帧呢
pm_code sec_pm
state site_no
me 10228955 010_628 2543677
010_228 2543677
015_634 2543677
我试过使用pd.MultiIndex.from_tuples
,但我没能做到这一点。谢谢你的帮助
附录:绩效比较 小的 大的
来自此的数据。您可以使用
pd.MultiIndex.from_array(y.T)
:
或者pd.MultiIndex.from_tuples(y.tolist())
:
您还可以对数组进行切片并传递到
索引
:
df = pd.DataFrame(x, index=[y[:,0], y[:,1]], columns=['pm_code', 'sec_pm'])
df
pm_code sec_pm
me 10228955 010_628 2543677
10228955 010_228 2543677
10228955 015_634 2543677
选项1
如果您传递一个类似数组的列表,那么构造函数知道如何处理它
pd.DataFrame(x, index=y.T.tolist(), columns=['pm_code', 'sec_pm'])
pm_code sec_pm
me 10228955 010_628 2543677
10228955 010_228 2543677
10228955 015_634 2543677
谢谢,这正是我需要的。@cᴏʟᴅsᴘᴇᴇᴅ: 我想皮尔平方建议a。我明白了。我通常不喜欢在答案之间耍花招,但如果你真的觉得他的答案更好,我会做一些测试,公布一些结果,然后采取相应的行动。感谢你是一个公平的运动。欣赏性能比较@安德烈:我想知道你的答案。它既漂亮又优雅。谢谢你的回答。
In [53]: pd.DataFrame(x, index=pd.MultiIndex.from_arrays(y.T), columns=['pm_code', 'sec_pm'])
Out[53]:
pm_code sec_pm
me 10228955 010_628 2543677
10228955 010_228 2543677
10228955 015_634 2543677
In [54]: pd.DataFrame(x, index=pd.MultiIndex.from_tuples(y.tolist()), columns=['pm_code', 'sec_pm'])
Out[54]:
pm_code sec_pm
me 10228955 010_628 2543677
10228955 010_228 2543677
10228955 015_634 2543677
df = pd.DataFrame(x, index=[y[:,0], y[:,1]], columns=['pm_code', 'sec_pm'])
df
pm_code sec_pm
me 10228955 010_628 2543677
10228955 010_228 2543677
10228955 015_634 2543677
pd.DataFrame(x, index=y.T.tolist(), columns=['pm_code', 'sec_pm'])
pm_code sec_pm
me 10228955 010_628 2543677
10228955 010_228 2543677
10228955 015_634 2543677