我想创建一年的排名(因此在2012年,经理B为1. 2011年,经理B再次为1).我和pandas rank函数挣扎了一段时间,并且不想求助于for循环.
s = pd.DataFrame([['2012','A',3],['2012','B',8],['2011','A',20],['2011','B',30]], columns=['Year','Manager','Return'])
Out[1]:
Year Manager Return
0 2012 A 3
1 2012 B 8
2 2011 A 20
3 2011 B 30
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是附加代码(之前认为这不相关):
s = pd.DataFrame([['2012', 'A', 3], ['2012', 'B', 8], ['2011', 'A', 20], ['2011', 'B', 30]], columns=['Year', 'Manager', 'Return'])
b = pd.DataFrame([['2012', 'A', 3], ['2012', 'B', 8], ['2011', 'A', 20], ['2011', 'B', 30]], columns=['Year', 'Manager', 'Return'])
s = s.append(b)
s['Rank'] = s.groupby(['Year'])['Return'].rank(ascending=False)
raise Exception('Reindexing only valid with uniquely valued Index '
Exception: Reindexing only …Run Code Online (Sandbox Code Playgroud) 我有以下数据集(非唯一ID):
id data country
1 8 B
2 15 A
3 14 D
3 19 D
3 8 C
3 20 A
Run Code Online (Sandbox Code Playgroud)
对于国家/地区为“ A”的行,我想添加一个“等级”列。
对于国家/地区为A的行,我想将“等级”值保留为空(或0)。
预期产量:
id data country rank
1 8 B 1
2 15 A 0
3 14 D 3
3 19 D 4
3 8 C 2
3 20 A 0
Run Code Online (Sandbox Code Playgroud)
我可以试试 :
df['rank'] = df['data'].rank(ascending=True)
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何考虑“国家”?