熊猫如何通过数据帧获得行索引列值

问题描述:

有我的数据框。 我有“操作”列,这些列中的值定义了循环。例如,Operation = 4定义了持续时间为1的循环开始,并且Operation = 9是该循环的结束。等A2和A3回路。我如何插入值和添加新的列,如果需要A1,A2,A3等等,通过开始和结束操作定义越来越多的循环。要强调的是,在重叠的情况下,如果已经存在,可以创建新的列或添加到现有的下一列。谢谢大家帮忙熊猫如何通过数据帧获得行索引列值

enter image description here

UPDATE:

In [136]: df 
Out[136]: 
    a b c operation 
0 8 7 5   1 
1 3 1 0   2 
2 5 4 0   3 
3 9 7 7   4 
4 4 6 8   5 
5 7 8 0   6 
6 1 8 8   7 
7 0 9 0   8 
8 9 9 7   9 
9 0 7 3   10 

In [137]: df['A1'] = '' 

In [138]: df.ix[(df.index >= df[df.operation == 4].index.tolist()) & \ 
    .....:  (df.index <= df[df.operation == 9].index.tolist()), 'A1'] = 1 

In [139]: 

In [139]: 

In [139]: df['A2'] = '' 

In [140]: df.ix[(df.index >= df[df.operation == 2].index.tolist()) & \ 
    .....:  (df.index <= df[df.operation == 7].index.tolist()), 'A2'] = 2 

In [141]: df 
Out[141]: 
    a b c operation A1 A2 
0 8 7 5   1 
1 3 1 0   2  2 
2 5 4 0   3  2 
3 9 7 7   4 1 2 
4 4 6 8   5 1 2 
5 7 8 0   6 1 2 
6 1 8 8   7 1 2 
7 0 9 0   8 1 
8 9 9 7   9 1 
9 0 7 3   10 

OLD答案:

In [93]: df 
Out[93]: 
    a b c OPERATION 
0 1 1 0  op2 
1 1 5 6  op2 
2 7 7 2  START 
3 1 6 2  op2 
4 7 7 4  op2 
5 3 2 0  op2 
6 6 9 9  op1 
7 6 1 4  END 
8 5 3 6  op1 
9 9 2 9  op3 

In [94]: df[(df.index >= df[df.OPERATION == 'START'].index.tolist()) & \ 
    ....: (df.index <= df[df.OPERATION == 'END'].index.tolist())] 
Out[94]: 
    a b c OPERATION 
2 7 7 2  START 
3 1 6 2  op2 
4 7 7 4  op2 
5 3 2 0  op2 
6 6 9 9  op1 
7 6 1 4  END 

说明:

In [53]: df.OPERATION == 'START' 
Out[53]: 
0 False 
1 False 
2  True 
3 False 
4 False 
5 False 
6 False 
7 False 
8 False 
9 False 
Name: OPERATION, dtype: bool 

In [54]: df[df.OPERATION == 'START'].index.tolist() 
Out[54]: [2] 

In [55]: df.index >= df[df.OPERATION == 'START'].index.tolist() 
Out[55]: array([False, False, True, True, True, True, True, True, True, True], dtype=bool) 
+0

非常感谢。所以如果我想在START和END之间添加新的'A'值x,我该怎么做?谢谢 – Felix

+0

@Felix,我不明白你想把什么价值放到新的专栏中。那么其他_行呢?或者你是否想要在START和END之间有行的另一个DF副本?您能否使用样本输入数据集(文本/ CSV/dict/JSO/pickle表单中的5-7行)更新您的问题并发布期望的输出? – MaxU

+0

@Felix,我已经更新了我的答案 - 请检查 – MaxU