熊猫数据框如何基于特定组和上一行值将值分配给列

时间:2019-04-26 06:39:50

标签: python pandas dataframe

我有一个数据框

plane   Time    Time_difference
  1      180    0
  1      195    15
  1     3000    2805
  1     3100    100
  2     2323    0
  2     2665    342

我想添加一列“行程”,如果Time_difference大于 500,它将开始新的行程,行程计数增加1,并且(如果Time_difference小于500,则行程编号应相同。 对于不同的飞机,旅行次数应重新从1开始

plane   Time  Time_difference  trip
  1      180     0             1
  1      195    15             1
  1     3000    2805           2
  1     3100    100            2
  2     2323    0              1     
  2     2665    342            1

我尝试了以下方法,但是对于不同的飞机,旅程并没有从1开始。

 def rollin(diff):
    if diff >= threshold:
       rollin.count += 1

    else:
      rollin.count 

    return rollin.count

 rollin.count = 0

 df2["trip"] = df2["Time_difference"].apply(rollin)

1 个答案:

答案 0 :(得分:0)

首先创建一个“旅行”列:

df['trip'] = 0

然后将每个平面组的第一行设置为值1。

df.loc[df.groupby('plane').head(1).index,'trip'] = 1

然后将“行程”列的任何Time_difference> 500设置为1

df.loc[df['Time_difference']>500, 'trip'] =1

然后按“飞机”分组取积

df['trip'] = df.groupby('plane')['trip'].cumsum()

print(df)

  plane  Time  Time_difference  trip
0      1   180                0     1
1      1   195               15     1
2      1  3000             2805     2
3      1  3100              100     2
4      2  2323                0     1
5      2  2665              342     1