我有一个熊猫数据框,看起来像这样:
df = pd.DataFrame( [ ['A','one',7], ['A','two',8], ['B','one',9], ['B','two',6]], columns=['ID', 'Type', 'Price'])
ID Type Price
0 A one 7
1 A two 8
2 B one 9
3 B two 6
我想添加一列,该列是每个ID之间比较“价格”的结果。所以结果看起来像这样:
ID Type Price Level
0 A one 7 low
1 A two 8 high
2 B one 9 high
3 B two 6 low
我正在寻找一种有效的方法。谢谢!
答案 0 :(得分:3)
我们可以先尝试groupby
+ rank
,然后再尝试map
df['Level']=df.groupby('ID').Price.rank().map({1:'low',2:'high'})
df
Out[221]:
ID Type Price Level
0 A one 7 low
1 A two 8 high
2 B one 9 high
3 B two 6 low
答案 1 :(得分:2)
让我们尝试duplicated
:
df['Level'] = (df.sort_values('Price').duplicated(['ID'])
.map({True:'high', False:'low'})
)
输出:
ID Type Price Level
0 A one 7 low
1 A two 8 high
2 B one 9 high
3 B two 6 low