簡體   English   中英

數據框將函數應用於具有特定條件的行

[英]Dataframe applying function to rows with specific condition

這是我的數據框示例:

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

這是火車預訂的數據框,DPT_DATE =出發日期TRAIN_NO =火車數量J_X =出發前的天(J_X = 0.0表示出發的日期,J_X = -1表示出發的日期),RES_HOLD_IND是預訂保留天

我想創建一個新列,因此對於每個DPT_DATE和TRAIN_NO,我都會在當天J_X = -1的情況下給我RES_HOLD_IND

示例(我想要這個):

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

謝謝您的幫助!

我想你需要先過濾器boolean indexingquery ,然后groupbyDataFrameGroupBy.ffill什么工作不錯,如果總是-1值在每組第一行:

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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM