2017-06-27 7 views
0

を関数を適用することは、私のデータフレームからのサンプルです:データフレームは、ここで特定の条件で行に

id  DPT_DATE TRANCHE_NO TRAIN_NO J_X RES_HOLD_IND 
0  2017-04-01  330.0 1234.0 -1.0   100.0 
1  2017-04-01  330.0 1234.0 0.0   80.0 
2  2017-04-02  331.0 1235.0 -1.0   91.0 
3  2017-04-02  331.0 1235.0 0.0   83.0 
4  2017-04-03  332.0 1236.0 -1.0   92.0 
5  2017-04-03  332.0 1236.0 0.0   81.0 
6  2017-04-04  333.0 1237.0 -1.0   87.0 
7  2017-04-04  333.0 1237.0 0.0   70.0 
8  2017-04-05  334.0 1238.0 -1.0   93.0 
9  2017-04-05  334.0 1238.0 0.0   90.0 
10 2017-04-06  335.0 1239.0 -1.0   89.0 
11 2017-04-06  335.0 1239.0 0.0   85.0 
12 2017-04-07  336.0 1240.0 -1.0   82.0 
13 2017-04-07  336.0 1240.0 0.0   76.0 

これは出発TRAIN_NOのデータフレーム列車予約のため、DPT_DATE =日=列車J_Xの数=出発前の日であります(J_X = 0.0は出発日を意味し、J_X = -1は出発後の日を意味します)、RES_HOLD_INDはその日の予約保留です

DPT_DATEとTRAIN_NOのそれぞれに対して新しい列を作成したいのですが、RES_HOLD_IND日J_X = -1

例(Iこれが欲しい):

id  DPT_DATE TRANCHE_NO TRAIN_NO J_X RES_HOLD_IND RES_J-1 
0  2017-04-01  330.0 1234.0 -1.0   100.0 100.0 
1  2017-04-01  330.0 1234.0 0.0   80.0 100.0 
2  2017-04-02  331.0 1235.0 -1.0   91.0 91.0 
3  2017-04-02  331.0 1235.0 0.0   83.0 91.0 
4  2017-04-03  332.0 1236.0 -1.0   92.0 92.0 
5  2017-04-03  332.0 1236.0 0.0   81.0 92.0 
6  2017-04-04  333.0 1237.0 -1.0   87.0 87.0 
7  2017-04-04  333.0 1237.0 0.0   70.0 87.0 

ありがとうございました!

答えて

2

常に-1値はグループごとに最初の行にある場合、私は、素敵な作品何をboolean indexingまたはqueryすることにより、第1のフィルタが必要だと思うし、その後DataFrameGroupBy.ffillgroupby

df['RES_J-1'] = df.query('J_X == -1')['RES_HOLD_IND'] 
#alternative 
#df['RES_J-1'] = df.loc[df['J_X'] == -1, 'RES_HOLD_IND'] 

df['RES_J-1'] = df.groupby(['DPT_DATE','TRAIN_NO'])['RES_J-1'].ffill() 
print (df) 
     DPT_DATE TRANCHE_NO TRAIN_NO J_X RES_HOLD_IND RES_J-1 
0 2017-04-01  330.0 1234.0 -1.0   100.0 100.0 
1 2017-04-01  330.0 1234.0 0.0   80.0 100.0 
2 2017-04-02  331.0 1235.0 -1.0   91.0  91.0 
3 2017-04-02  331.0 1235.0 0.0   83.0  91.0 
4 2017-04-03  332.0 1236.0 -1.0   92.0  92.0 
5 2017-04-03  332.0 1236.0 0.0   81.0  92.0 
6 2017-04-04  333.0 1237.0 -1.0   87.0  87.0 
7 2017-04-04  333.0 1237.0 0.0   70.0  87.0 
8 2017-04-05  334.0 1238.0 -1.0   93.0  93.0 
9 2017-04-05  334.0 1238.0 0.0   90.0  93.0 
10 2017-04-06  335.0 1239.0 -1.0   89.0  89.0 
11 2017-04-06  335.0 1239.0 0.0   85.0  89.0 
12 2017-04-07  336.0 1240.0 -1.0   82.0  82.0 
13 2017-04-07  336.0 1240.0 0.0   76.0  82.0 

-1が唯一のグループごとではなく、ある場合には常に最初の使用:

df['RES_J-1'] = df.groupby(['DPT_DATE','TRAIN_NO'])['RES_J-1'] 
        .apply(lambda x: x.ffill().bfill()) 
+0

はそれは私がまさに必要だありがとう:) –

関連する問題