sort_values() 与 'key' 对数据框中的元组列进行排序

vpv*_*inc 4 python sorting tuples key pandas

我有以下数据框:

df = pd.DataFrame({'Params': {0: (400, 30),
  1: (2000, 10),
  2: (1200, 10),
  3: (2000, 30),
  4: (1600, None)},
 'mean_test_score': {0: -0.6197478578718253,
  1: -0.6164605619489576,
  2: -0.6229674626212879,
  3: -0.7963084775995496,
  4: -0.7854265341671137}})
Run Code Online (Sandbox Code Playgroud)

我希望根据第一列中元组的第一个元素对其进行排序

所需输出的第一列:

{'Params': {0: (400, 30),
  2: (1200, 10),
  4: (1600, 10),
  1: (2000, 10),
  3: (2000, 30), 
Run Code Online (Sandbox Code Playgroud)

我尝试df.sort_values(by=('Params'), key=lambda x:x[0])像使用列表一样使用,.sort但出现以下值错误:ValueError: User-provided key function must not change the shape of the array.

我查看了 的文档sort_values(),但它对 lambda 不起作用的原因没有多大帮助。

编辑:按照@DeepSpace的建议,我不能做 df.sort_values(by='Params')'<' not supported between instances of 'NoneType' and 'int'

Ynj*_*jmh 8

sort_values()的文档说

key应该期望 aSeries并返回一个与输入形状相同的 Series。

在 中df.sort_values(by=('Params'), key=lambda x:x[0])x实际上是Params列。通过访问xwith x[0],您将返回 Series 的第一个元素x,该元素与输入 Series 的形状不同。因此给你错误。

如果你想按元组的第一个元素排序,你可以这样做

df.sort_values(by='Params', key=lambda col: col.map(lambda x: x[0]))
# or
df.sort_values(by='Params', key=lambda col: col.str[0])
Run Code Online (Sandbox Code Playgroud)