2017-08-19 3 views
0

Ich habe diesen Datenrahmen, den ich beitreten muss, um die akademischen Jahre zu finden.Self-Join-Daten, um eindeutige Jahre zu bekommen

df11=pd.read_csv('https://s3.amazonaws.com/todel1623/myso.csv') 

df11.course_id.value_counts() 
274 3 
285 2 
260 1 

Ich kann Self-Join verwenden und die jeweiligen Jahre ohne jedes Problem bekommen.

df=df11.merge(df11[['course_id']], on='course_id') 

df.course_id.value_counts() 
274 9 
285 4 
260 1 

Aber die erwartete Anzahl in diesem Fall ist

274 6 
285 4 
260 2 

Dies liegt daran, selbst wenn es 3 Jahre sind für ID 274, die Kursdauer nur 24 Monate. Und selbst wenn es nur einen Datensatz für 260 gibt, da die Dauer 24 Monate beträgt, sollte er 2 Datensätze zurückgeben. (einmal für das laufende Jahr und das andere für current_year + 1), der Rest der Spaltenwerte ist für diese Gruppe gleich.


Kann ich eine Schleife für Dataframe so etwas schreiben?

for row in df: 
    if i in range((df.duration_inmonths/12)): 
     df.row.year= df.row.year + i 
     df.append(df.row) 

Im folgenden Fall sollte der erste Datensatz 2017 und nicht 2018.

myl=list() 
for row in df11.values: 
    for i in range(int(row[15]/12)): 
     row[5]=row[5]+i 
     myl.append(row) 

myl[:2] 

[array([383, 1102, 'C-43049', 'M.B.A./M.M.S.', 'Un-Aided', 2018, 80000, 
     8000, 900, 312, 89212, 2018, 12, 260, 95, 24, 1102.0, 
     'M.B.A./M.M.S.'], dtype=object), 
array([383, 1102, 'C-43049', 'M.B.A./M.M.S.', 'Un-Aided', 2018, 80000, 
     8000, 900, 312, 89212, 2018, 12, 260, 95, 24, 1102.0, 
     'M.B.A./M.M.S.'], dtype=object)] 
+0

HI, Sie suchen also df11 zu "erweitern"? zB würde die erste Zeile (course_id = 260) aufgrund der duration_inmonths = 24 zu zwei Zeilen werden? Das gleiche für die drei Reihen von 274, wie sie 6 Reihen werden würden? –

Antwort

0

numpy Array scheinen nicht mit geänderten Werten in einer Liste anzuhängen. Es funktionierte, als ich es in eine Liste umwandelte.

myl.append(row.tolist()) 
Verwandte Themen