python - 熊猫 sort_value() 问题。应用关键参数时排序整数错误
问题描述
大家好,我试图到处寻找这个问题,但我无法找到解决方案。如果你能帮助我,我会很高兴。
所以,基本上我有这个数据集:
df = pd.DataFrame({"col1": ['xxx', 'xxx', 'xxx', 'kkk', 'www', 'www'],
"col2": [ 2020, 1994, 2013, 1000, 1996, 2021]})
df.dtypes
col1 object
col2 int64
dtype: object
我想以服装顺序对第一列进行排序,以升序对第二列进行排序。最终结果应如下所示:
col1 col2
4 www 1996
5 www 2021
3 kkk 1000
0 xxx 1994
1 xxx 2013
2 xxx 2020
所以,为了实现这一点,我这样做:
d = {'xxx': 4, 'zzz':1, 'yyy':5, 'kkk':2, 'jjj':3, 'www':0} # to customize order
df.sort_values(by = ['col1' , 'col2'], key = lambda x: x.map(d))
但我最终得到了这个:
col1 col2
4 www 1996
5 www 2021
3 kkk 1000
0 xxx 2020
1 xxx 1994
2 xxx 2013
如果我只这样做:
df.sort_values(by = ['col1' , 'col2'])
col1 col2
3 kkk 1000
4 www 1996
5 www 2021
1 xxx 1994
2 xxx 2013
0 xxx 2020
col2 订购良好。我真的不知道为什么我会遇到这个问题。有没有人经历过类似的事情?谢谢
解决方案
可能的技巧是通过以下值扩展字典col2
:
d = {'xxx': 4, 'zzz':1, 'yyy':5, 'kkk':2, 'jjj':3, 'www':0} # to customize order
d = {**d, **dict(zip(df.col2, df.col2))}
df = df.sort_values(by = ['col1' , 'col2'], key = lambda x: x.map(d))
print (df)
col1 col2
4 www 1996
5 www 2021
3 kkk 1000
1 xxx 1994
2 xxx 2013
0 xxx 2020
或解决方案get
- 如果没有匹配则返回相同的值NaN
:
df = df.sort_values(by = ['col1' , 'col2'], key = lambda x: x.map(lambda y: d.get(y, y)))
print (df)
col1 col2
4 www 1996
5 www 2021
3 kkk 1000
1 xxx 1994
2 xxx 2013
0 xxx 2020
使用帮助列的解决方案:
d = {'xxx': 4, 'zzz':1, 'yyy':5, 'kkk':2, 'jjj':3, 'www':0}
df = df.assign(new=df['col1'].map(d)).sort_values(by=['new','col2']).drop('new', axis=1)
print (df)
col1 col2
4 www 1996
5 www 2021
3 kkk 1000
1 xxx 1994
2 xxx 2013
0 xxx 2020
推荐阅读
- c++ - 从 CSV 文件中读取数据并尝试将数据加载到由结构组成的向量中?
- java - JavaFX PropertyValueFactory 无法检索属性
- apache-spark - 在 Google Colab 上工作时如何打开 Spark UI?
- tensorflow - 使用 Keras 时,第一层的权重在训练后不会改变
- synchronization - 带锁的同步 numpy 2D 数组计数器
- excel - 如何简化访问查询
- c# - 以编程方式获取 ASP MVC Web 应用程序的所有全局过滤器
- powershell - 如何通过传递参数从jenkins执行powershell脚本
- javascript - ReactJS:更新组件时无法在“节点”上执行“removeChild”
- ios - 从 UIBarButtonItem 获取目标 ViewController?