Python pandas dataframe 分组选择列

2024-09-30 18:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下详细的bb:

bq_selection_id bq_balance  bq_market_id  bq_back_price
0         45094462     185.04       7278437           1.97
1         45094462     185.04       7278437           1.97
2         45094463     185.04       7278437           3.05
3         45094463     185.04       7278437           3.05
4         45094464     185.04       7278437           5.80
5         45094464     185.04       7278437           5.80
6         45094466     185.04       7278437         200.00
7         45094466     185.04       7278437         200.00
8         45094465     185.04       7278437            NaN
9         45094465     185.04       7278437            NaN

我想按“市场价”分组,取前两个最低的“bq价”。我设法用

^{pr2}$

问题是我遗漏了一些列,比如“bq_selection_id”、“bq_balance”和“bq_back_price”列没有名称。这就是我得到的

bq_market_id   
7278437       0    1.97
7278437       1    1.97

我想要这样的东西

bq_selection_id bq_balance  bq_market_id  bq_back_price
0         45094462     185.04       7278437           1.97
1         45094462     185.04       7278437           1.97

你能帮帮我吗?在


Tags: 名称idbacknanmarketpricebqbalance
3条回答

您可以先对bq_back_price上的值进行排序,然后在每个组中取{}。在

In [218]: df.sort_values('bq_back_price').groupby('bq_market_id').head(2)
Out[218]:
   bq_selection_id  bq_balance  bq_market_id  bq_back_price
0         45094462      185.04       7278437           1.97
1         45094462      185.04       7278437           1.97

您可以通过indexes使用^{}

print bb.groupby('bq_market_id')['bq_back_price'].nsmallest(2).reset_index(level=0, name='bq_back_price')
   bq_market_id  bq_back_price
0       7278437           1.97
1       7278437           1.97

print pd.merge(bb[['bq_selection_id','bq_balance']],
               bb.groupby('bq_market_id')['bq_back_price'].nsmallest(2).reset_index(level=0, name='bq_back_price'),
               left_index=True,
               right_index=True)
   bq_selection_id  bq_balance  bq_market_id  bq_back_price
0         45094462      185.04       7278437           1.97
1         45094462      185.04       7278437           1.97

unutbu删除了很好的答案,但我认为它比我的答案更好:

^{pr2}$

加一个新的“排名”栏怎么样?在

bb['rank'] = bb.groupby(['bq_market_id'])['bq_back_price'].rank(ascending=True)

之后,你可以过滤bb最低的2个价格(排名1和2)。在

^{pr2}$

贷方:python pandas rank by column

相关问题 更多 >