pandas 根据条件选择前两行

ecr0jaav  于 2023-09-29  发布在  其他
关注(0)|答案(2)|浏览(132)

我有一个这样的数据库:
| ID|值|
| --|--|
| 12345 |一百二十三点七八|
| 12345 |556.87|
| 12345 |1638.09|
| 12345 |133.44|
| 56789 | 44 |
| 56789 |四百三十四点二|
| 56789 |二十四点四十四|
我希望我的输出选择找到的每个ID的前两行,并将最早的值作为新值,将最早的值作为旧值:
| ID|新值|旧值|
| --|--|--|
| 12345 |一百二十三点七八|556.87|
| 56789 | 44 |四百三十四点二|
非常感谢你的帮助!

ujv3wf0j

ujv3wf0j1#

可以使用groupbynth

g = df.set_index("ID").groupby(level=0)
output = pd.concat([g.nth(0),g.nth(1)],axis=1).set_axis(["New Value", "Old Value"], axis=1).reset_index()

>>> output
      ID  New Value  Old Value
0  12345     123.78     556.87
1  56789      44.00     434.20
ee7vknir

ee7vknir2#

这是pivot的变体,带有数据过滤:

out = (df
   .assign(col=lambda d: d.groupby('ID').cumcount())  # enumerate values
   .query('col < 2') # select top 2 per group
   .pivot(index='ID', columns='col', values='Value')  # reshape
   .set_axis(['New Value', 'Old Value'], axis=1).reset_index() # clean-up
)

输出量:

ID  New Value  Old Value
0  12345     123.78     556.87
1  56789      44.00     434.20

相关问题