如何根据特定列的值重新排列数据框的行
How to rearrange rows of a dataframe according to the values of a specific column
我正在处理一个数据框,其中有一列名为 season。每个赛季都有很多场比赛。季节顺序将重新安排。
赛季顺序为 2017,2008,2009,2010,2011,2012,2013,2014,2015,2016,2018,2019
.
我想在 2016 赛季行之后引入 2017 赛季的所有行。
数据是这样的,(将id重命名为match_id,这里显示的列很少,总共有是 18)
match_id season city winner
0 1 2017 Hyderabad Sunrisers Hyderabad
1 2 2017 Pune Rising Pune Supergiant
2 3 2017 Rajkot Kolkata Knight Riders
3 4 2017 Indore Kings XI Punjab
4 5 2017 Bangalore Royal Challengers Bangalore
我试过了,
df.set_index('season')
然后,
df.reindex([2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,2016, 2017, 2018, 2019])
但输出很糟糕,
match_id season city winner
2008 NaN NaN NaN NaN
2009 NaN NaN NaN NaN
2010 NaN NaN NaN NaN
2011 NaN NaN NaN NaN
2012 NaN NaN NaN NaN
2013 NaN NaN NaN NaN
2014 NaN NaN NaN NaN
2015 NaN NaN NaN NaN
2016 NaN NaN NaN NaN
2017 NaN NaN NaN NaN
2018 NaN NaN NaN NaN
2019 NaN NaN NaN NaN
第一个想法是按顺序分类排序 list
:
L =[2008,2009, 2010, 2011, 2012, 2013, 2014, 2015,2016,2017, 2018, 2019]
df['season'] = pd.Categorical(df['season'], ordered=True, categories=L)
df = df.sort_values(['season','match_id'], ignore_index=True)
或者您可以创建带有枚举的字典,以便在 key
参数中进行映射:
L =[2008,2009, 2010, 2011, 2012, 2013, 2014, 2015,2016,2017, 2018, 2019]
d = {v: k for k, v in enumerate(L)}
df = df.sort_values('season', key = lambda x: x.map(d), ignore_index=True)
我正在处理一个数据框,其中有一列名为 season。每个赛季都有很多场比赛。季节顺序将重新安排。
赛季顺序为 2017,2008,2009,2010,2011,2012,2013,2014,2015,2016,2018,2019
.
我想在 2016 赛季行之后引入 2017 赛季的所有行。
数据是这样的,(将id重命名为match_id,这里显示的列很少,总共有是 18)
match_id season city winner
0 1 2017 Hyderabad Sunrisers Hyderabad
1 2 2017 Pune Rising Pune Supergiant
2 3 2017 Rajkot Kolkata Knight Riders
3 4 2017 Indore Kings XI Punjab
4 5 2017 Bangalore Royal Challengers Bangalore
我试过了,
df.set_index('season')
然后,
df.reindex([2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015,2016, 2017, 2018, 2019])
但输出很糟糕,
match_id season city winner
2008 NaN NaN NaN NaN
2009 NaN NaN NaN NaN
2010 NaN NaN NaN NaN
2011 NaN NaN NaN NaN
2012 NaN NaN NaN NaN
2013 NaN NaN NaN NaN
2014 NaN NaN NaN NaN
2015 NaN NaN NaN NaN
2016 NaN NaN NaN NaN
2017 NaN NaN NaN NaN
2018 NaN NaN NaN NaN
2019 NaN NaN NaN NaN
第一个想法是按顺序分类排序 list
:
L =[2008,2009, 2010, 2011, 2012, 2013, 2014, 2015,2016,2017, 2018, 2019]
df['season'] = pd.Categorical(df['season'], ordered=True, categories=L)
df = df.sort_values(['season','match_id'], ignore_index=True)
或者您可以创建带有枚举的字典,以便在 key
参数中进行映射:
L =[2008,2009, 2010, 2011, 2012, 2013, 2014, 2015,2016,2017, 2018, 2019]
d = {v: k for k, v in enumerate(L)}
df = df.sort_values('season', key = lambda x: x.map(d), ignore_index=True)