Python 排序、分组并获取一行和一行+;1表示特定列的值?

Python 排序、分组并获取一行和一行+;1表示特定列的值?,python,pandas,group-by,sum,multi-index,Python,Pandas,Group By,Sum,Multi Index,我想根据“C1”列的值对我的数据进行分组,并根据它们的“route_Seq”进行排序。因此,对于每个C1,路径_Seq被排序 然后,我想对每个组中Mod_trans为“road”的行和后面一行的“Connection_time”列的值求和。如果道路是组中的最后一个转弯,则仅求和道路的连接时间 期望的答案: C1 route_Seq Connection_time Mod_trans R1 1 10

我想根据“C1”列的值对我的数据进行分组,并根据它们的“route_Seq”进行排序。因此,对于每个C1,路径_Seq被排序

然后,我想对每个组中Mod_trans为“road”的行和后面一行的“Connection_time”列的值求和。如果道路是组中的最后一个转弯,则仅求和道路的连接时间

期望的答案:

        C1  route_Seq   Connection_time     Mod_trans
        R1  1   10                          road
        R1  2   2                            air
        R1  3   4                            air
        R1  4   2                           road
        R1  5   3                            air
        R1  6   4                           road
        R2  1   3                           road
        R2  2   2                            air
        R3  1   1                           road
        R3  2   2                            air
我尝试过这个代码,但它没有给我两个连续的代码的总和,而是对每个“road”后面的所有行进行总和


有人能帮我吗?

仍然像以前一样使用相同的想法,
ffill
limit
来限制新行,和
cumsum
来创建
groupby

df.set_index(['C1','Mod_trans',(df['Mod_trans'] == 'road').cumsum()]).sum(level=[0,2]).reset_index().assign(Mod_trans='road')

仍然像以前一样使用相同的想法,
ffill
with
limit
来限制新行,
cumsum
来创建
groupby

df.set_index(['C1','Mod_trans',(df['Mod_trans'] == 'road').cumsum()]).sum(level=[0,2]).reset_index().assign(Mod_trans='road')
让我们试试:

df['cumid']=df.Mod_trans.eq('road').groupby(df['C1']).cumsum()
s=df['Mod_trans'].where(df['Mod_trans'].eq('road'))
df['newroad']=s.groupby([df.C1,df.cumid]).ffill(limit=1)
df['cumid']=df.Mod_trans.eq('road').groupby(df['C1']).cumsum()
df=df.loc[df.newroad=='road',:]
df.groupby(['C1','cumid','newroad'])['Connection_time'].sum()
Out[285]: 
C1  cumid  newroad
R1  1.0    road       12
    2.0    road        5
    3.0    road        4
R2  1.0    road        5
R3  1.0    road        3
Name: Connection_time, dtype: int64
输出:

df['CumRoad'] = (df.sort_values('route_Seq')
                   .groupby('C1')
                   .apply(lambda x: (x['Mod_trans']=='road').cumsum()).values)

df_out = (df.groupby(['C1','CumRoad'])
            .apply(lambda x: x.head(2)['Connection_time'].sum())
            .reset_index())

print(df_out)
让我们试试:

df['cumid']=df.Mod_trans.eq('road').groupby(df['C1']).cumsum()
s=df['Mod_trans'].where(df['Mod_trans'].eq('road'))
df['newroad']=s.groupby([df.C1,df.cumid]).ffill(limit=1)
df['cumid']=df.Mod_trans.eq('road').groupby(df['C1']).cumsum()
df=df.loc[df.newroad=='road',:]
df.groupby(['C1','cumid','newroad'])['Connection_time'].sum()
Out[285]: 
C1  cumid  newroad
R1  1.0    road       12
    2.0    road        5
    3.0    road        4
R2  1.0    road        5
R3  1.0    road        3
Name: Connection_time, dtype: int64
输出:

df['CumRoad'] = (df.sort_values('route_Seq')
                   .groupby('C1')
                   .apply(lambda x: (x['Mod_trans']=='road').cumsum()).values)

df_out = (df.groupby(['C1','CumRoad'])
            .apply(lambda x: x.head(2)['Connection_time'].sum())
            .reset_index())

print(df_out)

还有答案,再次感谢。还有答案,再次感谢。