sort_values安排值错误

时间:2018-04-05 12:44:45

标签: python pandas

我有一个数据框,其中有几列Client ID,Prd No,Prd Weight。我将Client ID作为索引列,作为使用wide_to_long方法将数据从wide转换为long的过程的一部分。

当我将sort_values方法应用于Prd No列时,这种安排很奇怪。它安排为1,10,100,101,2,20,200 ......等。我希望如何安排数据是1,2,3,4 ...

我尝试了各种各样的事情,包括使用astype()方法将Prd No显式更改为整数类型,但没有运气。

我可能做错了什么?它是我正在使用的熊猫的设置或版本吗?帮忙,有人吗?

import pandas as pd

df = pd.read_csv("new_export.csv")

df1 = pd.wide_to_long(df,['diameterbh', 'base_diam_1', 'length_1', 'top_diam_1', 'base_diam_2', 'length_2', 'top_diam_2', 'base_diam_3', 'length_3', 'top_diam_3', 'x_product'], i='uniqueID', j='Tree Number', sep='_')
df3 = df2[df2['diameterbh'].notnull()].fillna(value=0)sort_values(by="Tree Number")

1 个答案:

答案 0 :(得分:0)

一些代码可能很有用。您确实应该在排序之前将索引更改为数字。请务必更新您的数据框,因为默认情况下,pandas会返回您的数据框的副本。这对我有用。

import pandas as pd

# you want to convert column a to index, and sort numerically
x = pd.DataFrame({'a': ['10', '2', '12', '1'], 'b': [100, 20, 120, 10]})
x.set_index('a', inplace=True) # Set the index (inplace to overwrite x)
x.index = x.index.astype(int)  # Make sure to change the index to a numeric type
x.sort_index(inplace=True)  # Again, inplace to prevent returning a copy

这使x成为具有正确排序索引的数据帧。