我有一个这样的数据框:
Produtos Estoque total Valor Total de estoque
0 70 10000 7180
1 70 2800000 2011550
2 70 125000 89800
3 71 540000 530980
4 71 89000 79280
5 84 205000 572770
... ... ... ...
14988 1003254 46000 1329400
14989 1003273 30570000 5502600
14990 1003274 62000000 3720000
14991 1003275 200000000 3840000
14992 1003276 710000 2108700
14993 1003279 6750000 715330
我正在尝试对“ Produtos”列进行排序,首先考虑第一个数字(如果相等,则考虑第二个,依此类推),例如:
100
1001
1002
10003
10004
100000
200
2001
20002
我发现我应该使用以下命令:
line.sort(key=lambda line: int(line.split()[0]))
但是我很难以正确的方式使用。
答案 0 :(得分:3)
首先通过indexing by str获取第一个值的值,通过argsort
获取排名,最后通过iloc
重新排序:
df = df.iloc[df['Produtos'].astype(str).str[0].argsort()]
print (df)
Produtos Estoque total Valor Total de estoque
14988 1003254 46000 1329400
14989 1003273 30570000 5502600
14990 1003274 62000000 3720000
14991 1003275 200000000 3840000
14992 1003276 710000 2108700
14993 1003279 6750000 715330
0 70 10000 7180
1 70 2800000 2011550
2 70 125000 89800
3 71 540000 530980
4 71 89000 79280
5 84 205000 572770
编辑:按首个值和长度排序可能是这个技巧-由助手DataFrame
按索引选择len
按首个值:
print (df)
Produtos Estoque total Valor Total de estoque
0 70 10000 7180.0
1 70 2800000 2011550.0
2 71 125000 89800.0
3 710 540000 530980.0
4 7100 89000 79280.0
5 84 205000 572770.0
14988 10032546000 1329400 NaN
14989 10032 30570000 5502600.0
14990 1003 62000000 3720000.0
14991 100 200000000 3840000.0
14992 10 710000 2108700.0
14993 1003279 6750000 715330.0
s = df['Produtos'].astype(str)
i = pd.DataFrame(np.c_[s.str[0].astype(int), s.str.len()]).sort_values([0,1]).index
print (i)
Int64Index([10, 9, 8, 7, 11, 6, 0, 1, 2, 3, 4, 5], dtype='int64')
df = df.iloc[i]
print (df)
Produtos Estoque total Valor Total de estoque
14992 10 710000 2108700.0
14991 100 200000000 3840000.0
14990 1003 62000000 3720000.0
14989 10032 30570000 5502600.0
14993 1003279 6750000 715330.0
14988 10032546000 1329400 NaN
0 70 10000 7180.0
1 70 2800000 2011550.0
2 71 125000 89800.0
3 710 540000 530980.0
4 7100 89000 79280.0
5 84 205000 572770.0
答案 1 :(得分:0)
像往常一样,@jezrael 的回答详细而精彩。但我发现了另一种选择,我认为值得分享:
我们可以在 sort_values 中使用 key
参数:
df.sort_values(by = ['Estoque'], key = lambda x:x.astype(str).str[0])
(抱歉,我无法将列与 pd.read_clipboard() 对齐)
结果