Python 根据其他列值对数据帧进行排序
我有这个数据帧Python 根据其他列值对数据帧进行排序,python,sorting,pandas,Python,Sorting,Pandas,我有这个数据帧df 我使用df=df.sort(列a、列b) 但是我会根据col_bmin和max值对df进行排序,首先将col_a值与mincol_b值进行排序,最后将col_a值与maxcol_b值进行排序: col_a col_b b 5 b 10 b 12 a 6 a 7 a 8 a 11 c 11
df
我使用df=df.sort(列a、列b)
但是我会根据col_b
min和max值对df
进行排序,首先将col_a
值与mincol_b
值进行排序,最后将col_a
值与maxcol_b
值进行排序:
col_a col_b
b 5
b 10
b 12
a 6
a 7
a 8
a 11
c 11
c 13
c 14
有没有一种使用熊猫功能进行这种排序的快速方法
编辑1:
@底漆溶液适用于2列df
。
使用此df
col_a col_b col_c
0 a 6 9
1 a 7 8
2 a 8 7
3 a 11 6
4 b 5 5
5 b 10 4
6 b 12 3
7 c 11 2
8 c 13 1
9 c 14 0
返回
ValueError: Wrong number of items passed 2, placement implies 1
编辑2
d = {'col_a' : ['a','a','a','a','b','b','c','c','c'],
'col_b' :[6,7,8,11,12,13,11,13,14],
'col_c' :[9,8,7,6,5,4,3,2,1]
}
df = DataFrame(d)
返回:
col_a col_b col_c
0 a 6 9
1 a 7 8
2 a 8 7
3 a 11 6
4 b 12 5
5 b 13 4
6 c 11 3
7 c 13 2
8 c 14 1
@使用此df
的底漆,您的代码不起作用,因为它返回:
col_a col_b col_c
0 a 6 9
1 a 7 8
2 a 8 7
3 a 11 6
4 c 11 3
5 c 13 2
6 c 14 1
7 b 12 5
8 b 13 4
我需要
col_a col_b col_c
0 a 6 9
1 a 7 8
2 a 8 7
3 a 11 6
4 b 12 5
5 b 13 4
6 c 11 3
7 c 13 2
8 c 14 1
由于c
组具有max(value)=14
,因此您的代码采用max(min)
值,您可以这样做:
df['min'] = df.groupby('col_a')['col_b'].transform(lambda x: x.min())
df = df.sort(['min', 'col_a', 'col_b']).reset_index(drop=True).drop('min', 1)
df
这将产生:
col_a col_b
0 b 5
1 b 10
2 b 12
3 a 6
4 a 7
5 a 8
6 a 11
7 c 11
8 c 13
9 c 14
编辑:
我已经修复了上面的代码,以确保transform
用于series而不是dataframe(从而避免了错误)
为我工作返回:
col_a col_b col_c
0 b 5 5
1 b 10 4
2 b 12 3
3 a 6 9
4 a 7 8
5 a 8 7
6 a 11 6
7 c 11 2
8 c 13 1
9 c 14 0
我想您可以很容易地将其转换为一个函数,应用于就地的数据帧。real df比示例中的df有更多的列,因此您的代码返回
ValueError:传递的项目数错误7,placement意味着1
@franco_b我想您需要提供更多详细信息来解释为什么使用此解决方案,使用示例数据实现所需输出的方法对实际数据不起作用。@franco_b ok,但您刚刚接受了此答案,您是否已准备就绪?请参阅答案中的编辑以查看此错误的修复方法(因为您添加了更多列transform
应用于GroupbyDataframe而不是系列)-只需在groupby
之后传递列的名称,即可应用transform
。@Primer我只需编辑问题,说明代码不起作用的原因
col_a col_b col_c
0 b 5 5
1 b 10 4
2 b 12 3
3 a 6 9
4 a 7 8
5 a 8 7
6 a 11 6
7 c 11 2
8 c 13 1
9 c 14 0