2016-04-14 200 views
1

有我的數據框。 我有「操作」列,這些列中的值定義了循環。例如,Operation = 4定義了持續時間爲1的循環開始,並且Operation = 9是該循環的結束。等A2和A3迴路。我如何插入值和添加新的列,如果需要A1,A2,A3等等,通過開始和結束操作定義越來越多的循環。要強調的是,在重疊的情況下,如果已經存在,可以創建新的列或添加到現有的下一列。謝謝大家幫忙熊貓如何通過數據幀獲得行索引列值

enter image description here

回答

0

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