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)]
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? –