让我们假设我有一个框架D:
D = pd.DataFrame({'a': [1,2,3], 'b': [3,3,4], 'c': [2, 4, 0], 'd': [-1,-1,-1]})
D
a b c d
0 1 3 2 -1
1 2 3 4 -1
2 3 4 0 -1
字符串
我想对列a、B、c中的值进行排序,比如说前两行,所以预期的结果是
a b c d
0 1 2 3 -1
1 2 3 4 -1
2 3 4 0 -1
型
为了避免链式赋值警告,我尝试使用df.loc:
D.loc[[0,1], ['a', 'b', 'c']].agg(['min', 'median', 'max'], axis=1)
min median max
0 1.0 2.0 3.0
1 2.0 3.0 4.0
D.loc[[0,1], ['a', 'b', 'c']] = D.loc[[0,1], ['a', 'b', 'c']].agg(['min', 'median', 'max'], axis=1)
D
a b c d
0 NaN NaN NaN -1
1 NaN NaN NaN -1
2 3.0 4.0 0.0 -1
的字符串
由于某些原因,值没有设置。我认为这可能是因为不同的列名,但D.loc[[0,1], ['a', 'b', 'c']] = D.loc[[0,1], ['a', 'b', 'c']].agg(['min', 'median', 'max'], axis=1).rename(columns={"min": "a", "median": "b", "max": "c"})
和D.loc[[0,1], ['a', 'b', 'c']] = D.loc[[0,1], ['a', 'b', 'c']].agg(['min', 'median', 'max'], axis=1).to_numpy()
也不起作用。手动更改值不是一个选择,因为在真实的示例中,我有大约800k行而不是3行,并且希望保持操作的向量化。那么正确的方法应该是什么呢?
2条答案
按热度按时间ryoqjall1#
使用
numpy.sort
:字符串
如果需要分配聚合函数,通过
DataFrame.to_numpy
将输出转换为numpy数组:型
sxissh062#
为了修复你的例子,使用显式转换
to_numpy
:字符串
如果你想排序,使用
numpy.sort
将转换为数组:型
输出量:
型