Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过构造函数创建多索引数据帧_Python_Pandas_Dataframe_Multi Index - Fatal编程技术网

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