मेरे पास एक डेटाफ्रेम है जो इसका प्रतिनिधित्व करता है:

मुझे एक और कॉलम 'Mark' बनाने की जरूरत है और यही कारण है कि यह जटिल है। मान के लिए 'C' निष्पादन का दिन Sunday 8/11/2018 है। अगला दिन Monday 9/11/2018 होगा। इसलिए मुझे previous week के weekdays मानों की गणना करने की आवश्यकता है। इस मामले के लिए मुझे 1/11/2018,2/11/2018,3/11/2018,4/11/2018 और 5/11/2018 की गणना करने की आवश्यकता है।

हालांकि, यदि execution day का next day Friday या Saturday है, तो मुझे पिछले सप्ताह 'Friday' और 'Saturday' के मान लेने होंगे। उदाहरण के लिए, B Thursday 12/11/2018' पर निष्पादित होता है। उसके बाद का दिन 'शुक्रवार' है। इसलिए मुझे पिछले सप्ताह के Friday और Saturday के औसत की गणना करने की आवश्यकता है जो 6/11/2018 और 7/11/2018 हैं

प्रारंभ में मेरे पास Day कॉलम नहीं था, जिसका उपयोग करके मैंने बाद के शब्द जोड़े

df['Execution']=pd.to_datetime(df['Execution'])
df['Day']=df['Execution'].dt.weekday_name

और मैं उस बिंदु पर पहुंच सकता हूं जहां यह कुछ प्रिंट करता है यदि execution date column dates में से किसी एक के साथ मेल खाता है। यहाँ कोड है-

for j,row in df.iterrows():
x=str(row['Execution'])
x=x[slicing]

for i, val in enumerate (df.columns.values):
    print(df.columns[i])

    if i<l1:
        val=str(val)
        val=val[slicing]
        if x==val: #Execution date matches column date
            print('yay')

मैं अपने दम पर अजगर सीखने की कोशिश कर रहा हूं और मैंने pandas dataframe सीखकर शुरुआत की है।
हालाँकि, अब मैं खो गया हूँ और आगे बढ़ने के लिए तर्क का पता नहीं लगा सका। क्या कोई मुझे रास्ता बता सकता है?

-1
T0167 9 अक्टूबर 2018, 12:45

1 उत्तर

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

यहां वह कोड है जो स्पष्टीकरण के साथ मेरे लिए काम करता है:

for i,row in df.iterrows():
  for j, val in enumerate (range(0,l1-1)):   #l1 is the number of columns 
               #subtracted 1 to not take last column in account as I only need the dates

    if df.columns[j+1]==row['Execution']: #to match the date of column execution,with the column dates

        a=pd.to_datetime(df.columns[j+1+1])
        a=a.day_name() #to convert the date in to weekday name
#As for friday I would need previous week's friday and saturday values.
#Therefore, I subtracted 7 and 8 to get the required value. For all the other days I calculated carefully this way so that I get the days right.
        if (a=='Friday'): 
            mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)])/2
#df.iloc(row,column) was used to get the values right
            markList.append(mark)
        elif (a=='Saturday'):
            mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-8)])/2
            markList.append(mark)
        elif (a=='Sunday'):
            mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-5)]+MPDr.iloc[i,(j+1+1-4)]+df.iloc[i,(j+1+1-3)])/5
            markList.append(mark)
        elif (a=='Monday'):
            mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-5)]+df.iloc[i,(j+1+1-4)]+df.iloc[i,(j+1+1-8)])/5
            markList.append(mark)
        elif (a=='Tuesday'):
            mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-5)]+df.iloc[i,(j+1+1-8)]+df.iloc[i,(j+1+1-9)])/5
            markList.append(mark)
        elif (a=='Wednesday'):
            mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-6)]+df.iloc[i,(j+1+1-8)]+df.iloc[i,(j+1+1-9)]+df.iloc[i,(j+1+1-10)])/5
            markList.append(mark)  
        elif (a=='Thursday'):
            mark=(df.iloc[i,(j+1+1-7)]+df.iloc[i,(j+1+1-8)]+df.iloc[i,(j+1+1-9)]+df.iloc[i,(j+1+1-10)]+df.iloc[i,(j+1+1-11)])/5
            markList.append(mark)

df['mark']=markList #To add at the end of the dataframe
0
T0167 10 अक्टूबर 2018, 05:01