从多个索引生成多个系列

时间:2018-03-09 09:46:25

标签: 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,'y':y})
df.set_index(['ind1','ind2'], inplace=True)

第一个系列,y_1类似于y_1 = df.ind1 == 0,y_2 = df.ind2 == 1等等。

我可以想象“手动”执行此操作的冗长而笨重的方法,但我确信有一种优雅的一两种方式来处理这个我不知道......

1 个答案:

答案 0 :(得分: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