自我加入数据以获得不同的年份

时间:2017-08-19 12:33:19

标签: pandas

我有这个数据框,我需要加入才能找到学年。

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

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

我可以使用自我加入并且没有任何问题地获得相应的年份。

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

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

但是这种情况下的预期计数是

274    6
285    4
260    2

这是因为即使id 274有3年,课程持续时间也只有24个月。即使持续时间为24个月只有260条记录,它也应该返回2条记录。 (一次为当年,另一次为current_year + 1),该组的其余列值相同。

我可以为数据帧写一个这样的循环吗?

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

在下列情况下,第一条记录应为2017年而不是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)]

1 个答案:

答案 0 :(得分:0)

numpy数组似乎没有附加到包含更改值的列表中。当我把它转换成列表时它起作用了。

myl.append(row.tolist())