【发布时间】:2020-12-01 06:26:33
【问题描述】:
我在下面有一个大数据框:
此处用作示例的数据“education_val.csv”可在此处找到https://github.com/ENLK/Py-Projects-/blob/master/education_val.csv
import pandas as pd
edu = pd.read_csv('education_val.csv')
del edu['Unnamed: 0']
edu.head(10)
ID Year Education
22445 1991 higher education
29925 1991 No qualifications
76165 1991 No qualifications
223725 1991 Other
280165 1991 intermediate qualifications
333205 1991 No qualifications
387605 1991 higher education
541285 1991 No qualifications
541965 1991 No qualifications
599765 1991 No qualifications
Education 列中的值为:
edu.Education.value_counts()
intermediate qualifications 153705
higher education 67020
No qualifications 55842
Other 36915
我想通过以下方式替换 Education 列中的值:
-
如果
ID在Education列中的某一年中具有值higher education,则该ID的所有未来年份在Education列中也将具有higher education。 -
如果
ID在一年中具有值intermediate qualifications,则该ID的所有未来年份将在相应的Education列中具有intermediate qualifications。但是,如果值higher education出现在此ID的任何后续年份,则higher education在后续年份替换intermediate qualifications,无论是Other还是No qualifications occur。
例如在下面的DataFrame中,ID22445在1991的年份有higher education的值,22445的所有后续值Education在以后的年份应该替换为higher education,到今年2017.
edu.loc[edu['ID'] == 22445]
ID Year Education
22445 1991 higher education
22445 1992 higher education
22445 1993 higher education
22445 1994 higher education
22445 1995 higher education
22445 1996 intermediate qualifications
22445 1997 intermediate qualifications
22445 1998 Other
22445 1999 No qualifications
22445 2000 intermediate qualifications
22445 2001 intermediate qualifications
22445 2002 intermediate qualifications
22445 2003 intermediate qualifications
22445 2004 intermediate qualifications
22445 2005 intermediate qualifications
22445 2006 intermediate qualifications
22445 2007 intermediate qualifications
22445 2008 intermediate qualifications
22445 2010 intermediate qualifications
22445 2011 intermediate qualifications
22445 2012 intermediate qualifications
22445 2013 intermediate qualifications
22445 2014 intermediate qualifications
22445 2015 intermediate qualifications
22445 2016 intermediate qualifications
22445 2017 intermediate qualifications
同样,下面数据框中的ID 1587125 在1991 年的值intermediate qualifications,并在1993 中更改为higher education。 1587125 在未来几年(从 1993 年起)Education 列中的所有后续值都应为 higher education。
edu.loc[edu['ID'] == 1587125]
ID Year Education
1587125 1991 intermediate qualifications
1587125 1992 intermediate qualifications
1587125 1993 higher education
1587125 1994 higher education
1587125 1995 higher education
1587125 1996 higher education
1587125 1997 higher education
1587125 1998 higher education
1587125 1999 higher education
1587125 2000 higher education
1587125 2001 higher education
1587125 2002 higher education
1587125 2003 higher education
1587125 2004 Other
1587125 2005 No qualifications
1587125 2006 intermediate qualifications
1587125 2007 intermediate qualifications
1587125 2008 intermediate qualifications
1587125 2010 intermediate qualifications
1587125 2011 higher education
1587125 2012 higher education
1587125 2013 higher education
1587125 2014 higher education
1587125 2015 higher education
1587125 2016 higher education
1587125 2017 higher education
数据中有 12,057 个唯一的ID,Year 列从 1991 年到 2017 年。如何根据上述条件更改所有 12、057 的 Education 的值?我不确定如何以统一的方式为所有独特的IDs 执行此操作。此处用作示例的示例数据附在上面的 Github 链接中。非常感谢。
【问题讨论】:
标签: python pandas panel-data