求助:如何按Set和Game对Pandas的market列实现正确排序?
解决Pandas按Set和Game顺序排序Market列的问题
没问题,我来帮你搞定这个排序难题!Pandas自带的sort_values()之所以没达到预期效果,是因为它默认把market列当成字符串来排序——字符串排序是按字符逐个比较的,所以"Game 10"会排在"Game 2"前面,这显然不是咱们要的按数字大小排序的结果。
咱们可以通过以下步骤实现按Set和Game的数字顺序排序:
步骤1:提取Set和Game的数字
先从market列里把Set和Game对应的数字提取出来,转换成整数类型,方便后续排序:
import pandas as pd # 假设你的数据框是df df[['Set', 'Game']] = df['market'].str.extract(r'Set (\d+), Game (\d+)').astype(int)
这段代码用正则表达式r'Set (\d+), Game (\d+)'从字符串里匹配出Set和Game后面的数字,然后转换成整数存入新的Set和Game列。
步骤2:按新列排序
现在就可以用这两个整数列来排序了,先按Set升序,再按Game升序:
df_sorted = df.sort_values(by=['Set', 'Game'])
步骤3:(可选)删除临时列
如果不需要保留Set和Game这两个临时列,可以用下面的代码删掉:
df_sorted = df_sorted.drop(columns=['Set', 'Game'])
完整示例
把这些步骤整合起来,针对你的数据的完整代码大概是这样:
import pandas as pd # 模拟你的数据 data = { 'market': [ 'Game Winner (Set 1, Game 1)', 'Game Winner (Set 1, Game 10)', 'Game Winner (Set 1, Game 11)', 'Game Winner (Set 1, Game 12)' ], 'stake': [1605.50, 2825.00, 700.00, 1500.00], 'profit': [-1020.30, 85.42, 100.00, 200.00] } df = pd.DataFrame(data) # 提取数字列 df[['Set', 'Game']] = df['market'].str.extract(r'Set (\d+), Game (\d+)').astype(int) # 排序 df_sorted = df.sort_values(by=['Set', 'Game']).drop(columns=['Set', 'Game']) print(df_sorted)
运行之后你就能得到按Set和Game数字顺序排列的结果啦!
内容的提问来源于stack exchange,提问作者wazo
相关产品推荐
相关产品推荐

