我想按多个字段(“日期”和“类别”)对熊猫数据帧进行分组,对于每一组,按百分位数对另一个字段(“值”)的值进行排名,同时保留原始(“值”)字段。
我尝试过:
df2 = df.groupby(['date', 'category'])['value'].rank(pct=True)
但这只返回'value‘字段的百分位数。
发布于 2019-05-17 10:30:47
我认为您需要将Series
赋值给新的列:
df = pd.DataFrame({
'value':[1,3,5,7,1,0],
'category':[5] * 6,
'date':list('aaabbb')
})
df['new'] = df.groupby(['date', 'category'])['value'].rank(pct=True)
print (df)
value category date new
0 1 5 a 0.333333
1 3 5 a 0.666667
2 5 5 a 1.000000
3 7 5 b 1.000000
4 1 5 b 0.666667
5 0 5 b 0.333333
DataFrame.assign
的替代方案
df = df.assign(new= df.groupby(['date', 'category'])['value'].rank(pct=True))
https://stackoverflow.com/questions/56184495
复制相似问题