Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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 - Fatal编程技术网

Python 从多个索引生成多个序列

Python 从多个索引生成多个序列,python,pandas,Python,Pandas,我想从下面的数据框中生成多个系列,理想情况下也将它们绘制在同一个图上 import numpy as np import pandas as pd # setting up data ind1 = np.mod(np.arange(0, 3*4), 3) ind2 = np.mod(np.repeat(np.array([[1,2,3]]), 4), 3) y = 2*ind1 - 0.5*ind2 df = pd.DataFrame({'ind1':ind1,'ind2':ind2,

我想从下面的数据框中生成多个系列,理想情况下也将它们绘制在同一个图上

import numpy as np 
import pandas as pd 

# setting up data 
ind1 = np.mod(np.arange(0, 3*4), 3)
ind2 = np.mod(np.repeat(np.array([[1,2,3]]), 4), 3)
y = 2*ind1 - 0.5*ind2 
df = pd.DataFrame({'ind1':ind1,'ind2':ind2,'y':y})
df.set_index(['ind1','ind2'], inplace=True)
其中,第一个序列y_1类似于y_1=df.ind1==0,y_2=df.ind2==1,依此类推


我可以想象长而笨重的方式做这个操作“手动”,但我觉得肯定有一个优雅的一个或两个线性的方式来处理这个问题,我错过了

这里有一个快速解决方案,尽管我不确定它是否符合您的要求:

# get number of index levels
lvl_cnt = len(df.index.levels)

# iterate each level, and add column to dataframe
for idx in range(lvl_cnt):
    label = "y_{}".format(idx+1)
    values = df.index.get_level_values(idx)
    df[label] = (values == idx).astype(int)

print(df)

                 y     y_1  y_2
ind1    ind2            
0       1      -0.5    1    1
1       1       1.5    0    1
2       1       3.5    0    1
0       1      -0.5    1    1
1       2       1.0    0    0
2       2       3.0    0    0
0       2      -1.0    1    0
1       2       1.0    0    0
2       0       4.0    0    0
0       0       0.0    1    0
1       0       2.0    0    0
2       0       4.0    0    0

我很难理解你在这里想要实现什么。您能提供一些示例结果吗?您好,您在下面写的内容演示并涵盖了我想要的内容。我想出了一个类似的方法,但更笨重。我想知道是否有可能在一行程序中完成整个迭代(或者是否值得费心)。我认为在这里创建一行程序既不值得,也不可读,因为它涉及几个单独的步骤。