根据分组 Dataframe 中列的第一行值更改该分组 Dataframe 中的值

yr9zkbsy  于 2022-09-18  发布在  Java
关注(0)|答案(2)|浏览(164)

我正在使用下面的代码来整理一些数据。它按'ID''L'分组,如果它是True,我使用一个条件在MT列中打印True。我想要的是,当组的第一行为True时,该组中的每隔一行应打印为True,而不考虑条件(例如,在下面的输出中,MT列中的第五行也应显示True,因为第一行的计算结果为True)。

import pandas as pd
df=pd.DataFrame({'TS' : [20,25,30,35,45,50,55,58,65,75,60,62,72,77],"ID" : [22,22,23,23,23,23,23,23,23,23,24,24,24,24],"L" : [1,2,1,2,2,2,1,1,2,2,1,1,2,2]})
df2=(df.assign(TS=df['TS'].abs())
    .groupby(['ID','L'])['TS'].agg([('Min' , 'min'), ('Max', 'max')])
    .add_prefix('TS'))
df3=(df2.assign(WT=df2['TSMax']-df2['TSMin'])
    .assign(MT=df2['TSMax'].gt(df2.groupby('ID')['TSMin'].shift(-1))))
df3

产出:

bis0qfac

bis0qfac1#

You can use df.transform with the condition:

df3.groupby('ID').MT.transform(lambda row: row.iloc[0] if row.iloc[0] else row)
czq61nw1

czq61nw12#

您可以在MT列上使用groupby,然后使用transform和一个lambda来检查值是否为True。

df3['MT'] = df3.groupby('ID')['MT'].transform(lambda x: x.values[0] if x.values[0] else x)

产出:

相关问题