【发布时间】:2022-07-19 20:51:12
【问题描述】:
我对@987654321@ 提出的问题有一个后续问题。
我的 pandas 数据框由几列组成,第一列有字符串值,其他列有浮点数。它看起来像这样:
Superheros hourly rate
Spiderman (Nr 1) 12.9
Batman (Nr 4) 93.7
Joker 23.6
Iron Man (Nr 2) 49.3
Hulk 32.5
Captain America 24.9
Wonderwoman (Nr 3) 65.8
一般而言,数据框应根据小时费率列进行排序,但所有带有数字的超级英雄都应位于数据框的底部。生成的数据框应如下所示
Superheros hourly rate
Hulk 32.5
Captain America 24.9
Joker 23.6
Batman (Nr 4) 93.7
Wonderwoman (Nr 3) 65.8
Iron Man (Nr 2) 49.3
Spiderman (Nr 1) 12.9
在我之前的问题中,我没有按第二列排序的条件,建议的解决方案导致了这个代码片段:
df['Superheros'] = df['Superheros'].str.replace(r'\bim\s+(Nr\s*\d+)', r'(\1)', regex=True)
df = df.replace(np.nan, '-')
s = pd.to_numeric(df['Superheros'].str.extract('\(VG (\d+)\)', expand=False))
idx = s.sort_values(na_position='first').index
df = df.loc[idx]
基于建议使用的相同逻辑:
sorter = lambda s: pd.to_numeric(s.str.extract('\(Nr (\d+)\)', expand=False))
out = df.sort_values(by='Superheros', key=sorter, na_position='first')
所以我想我可以简单地将 by='Superheros' 更改为 by='hourly rate',但这不起作用(我想我明白为什么)。不幸的是,我对如何做到这一点没有任何其他想法,除了可能将数据框分成两部分,分别对它们进行排序,然后将它们重新合并在一起。有没有更好的 Pythonic 方式来做到这一点?
提前致谢!
【问题讨论】: