我想添加一列,该列是特定列中唯一值的索引。
原始数据框为:
service
理想的是:
Team Rank Year Points
0 Riders 1 2014 876
1 Riders 2 2015 789
2 Devils 2 2014 863
3 Devils 3 2015 673
4 Kings 3 2014 741
5 kings 4 2015 812
6 Kings 1 2016 756
7 Kings 1 2017 788
8 Riders 2 2016 694
9 Royals 4 2014 701
10 Royals 1 2015 804
11 Riders 2 2017 690
然后我定义了一个函数来帮助我:
Team Rank Year Points year code
0 Riders 1 2014 876 0
1 Devils 2 2014 863 0
2 Kings 3 2014 741 0
3 Royals 4 2014 701 0
4 Riders 2 2015 789 1
5 Devils 3 2015 673 1
6 kings 4 2015 812 1
7 Royals 1 2015 804 1
8 Kings 1 2016 756 2
9 Riders 2 2016 694 2
10 Kings 1 2017 788 3
11 Riders 2 2017 690 3
定义部分正常运行,但是当我将其应用于数据框时,会发生错误:
def gen_countrycode(df):
grouped = df.groupby('Country Name')
Countries=df['Country Name'].unique()
group_num=range(len(df.groupby(['Country Name']).groups))
newdf=pd.DataFrame()
for i in group_num:
country=Countries[i]
country_group=grouped.get_group(country)
country_group['country code']=i
newdf=pd.concat([newdf,country_group], ignore_index=True)
return newdf
不知道为什么不能在函数中操纵数据框。 顺便说一下,如果有更好的方法来生成这样的“组代码”,感谢您的启发!
答案 0 :(得分:1)
df1 = df.sort_values('Year')
df1['year code'] = df1.groupby('Year').ngroup()
df1 = df1.reset_index(drop=True)
# df.sort_values('Year').assign(Code=df.groupby('Year').ngroup()).reset_index(drop=True)
Team Rank Year Points year code
0 Riders 1 2014 876 0
1 Devils 2 2014 863 0
2 Kings 3 2014 741 0
3 Royals 4 2014 701 0
4 Riders 2 2015 789 1
5 Devils 3 2015 673 1
6 kings 4 2015 812 1
7 Royals 1 2015 804 1
8 Kings 1 2016 756 2
9 Riders 2 2016 694 2
10 Kings 1 2017 788 3
11 Riders 2 2017 690 3