Pandas:比较组内的所有行并检查条件是否满足

2024-04-16 11:43:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较组中的所有行,以检查是否满足条件。如果条件未满足,我将新列设置为True,否则设置为False。我面临的问题是找到一种简洁的方法来比较每组中的所有行。我有一些东西可以工作,但在一个组中有很多行的情况下不起作用

for i in range(8):
    n = -i-1
    cond=(((df['age']-df['age'].shift(n))*(df['weight']-df['weight'].shift(n)))<0)&(df['ref']==df['ref'].shift(n))&(df['age']<7)&(df['age'].shift(n)<7)
    df['x'+i] = cond.groupby(df['ref']).transform('any')
df.loc[:,'WFA'] = 0
df.loc[(df['x0']==False)&(df['x1']==False)&(df['x2']==False)&(df['x3']==False)&(df['x4']==False)&(df['x5']==False)&(df['x6']==False)&(df['x7']==False),'WFA'] = 1

为了遍历每一行,我创建了一个比较相邻行的循环(使用shift)。每个循环表示下一个相邻行。实际上,我能够比较一个组中的所有行,其中一个组中的行数为8或更少。可以想象,随着行数的增加,它变得相当麻烦

我不想为shift中的每个时段创建of列,而是想查看是否有任何行与任何其他行的条件相匹配。然后将新列“WFA”设置为True或False


Tags: 方法inreffalsetruedfforage
1条回答
网友
1楼 · 发布于 2024-04-16 11:43:53

如果有人感兴趣,我将自己问题的答案贴在这里(尽管速度很慢):

df.loc[:,'WFA'] = 0
for ref, gref in df.groupby('ref'):
    count=0
    for r_idx, row in gref.iterrows():
        cond = ((((row['age']-gref.loc[gref['age']<7, 'age'])*(row['weight']-gref.loc[gref['age']<7, 'weight']))<0).any())&(row['age']<7)
        if cond==False:
            count+=1
    if count==len(gref):
        df.loc[df['ref']==ref, 'WFA'] = 1

相关问题 更多 >