我正在使用下面的代码来整理一些数据。它按'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
产出:
2条答案
按热度按时间bis0qfac1#
You can use
df.transform
with the condition:czq61nw12#
您可以在MT列上使用
groupby
,然后使用transform
和一个lambda来检查值是否为True。产出: