मैं यह जांचने के लिए समूह के भीतर सभी पंक्तियों की तुलना करने की कोशिश कर रहा हूं कि कोई शर्त पूरी हुई है या नहीं। यदि शर्त पूरी नहीं होती है, तो मैं नया कॉलम सही पर सेट करता हूं, अन्यथा गलत। मेरे पास जो मुद्दा है वह प्रत्येक समूह के भीतर सभी पंक्तियों की तुलना करने का एक साफ तरीका ढूंढ रहा है। मेरे पास कुछ ऐसा है जो काम करता है लेकिन काम नहीं करेगा जहां समूह में बहुत सारी पंक्तियां हों।

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

प्रत्येक पंक्ति के माध्यम से पुनरावृति करने के लिए, मैंने एक लूप बनाया है जो आसन्न पंक्तियों (शिफ्ट का उपयोग करके) की तुलना करता है। प्रत्येक लूप अगली आसन्न पंक्ति का प्रतिनिधित्व करता है। असल में, मैं उस समूह के भीतर सभी पंक्तियों की तुलना करने में सक्षम हूं जहां समूह के भीतर पंक्तियों की संख्या 8 या उससे कम है। जैसा कि आप कल्पना कर सकते हैं, यह बहुत बोझिल हो जाता है क्योंकि पंक्तियों की संख्या बड़ी हो जाती है।

शिफ्ट में प्रत्येक अवधि के लिए कॉलम बनाने के बजाय, मैं देखना चाहता हूं कि कोई पंक्ति किसी अन्य पंक्ति के साथ स्थिति से मेल खाती है या नहीं। फिर नया कॉलम 'WFA' सही या गलत सेट करें।

0
nrcjea001 1 अप्रैल 2020, 06:29

1 उत्तर

सबसे बढ़िया उत्तर

अगर किसी को दिलचस्पी है, तो मैं यहां अपने प्रश्न का उत्तर पोस्ट करता हूं (हालांकि यह बहुत धीमा है):

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
0
nrcjea001 2 अप्रैल 2020, 03:48