我尝试使用awk、sort、sed
获取以下输入数据。我觉得使用这些 UNIX 实用程序来处理它们可能太复杂了。 pandas
可能不错。
这些是对数据进行排序的条件。
- 首先按升序对第 1 列进行排序。
- 现在,在每个第 #1 列中,根据第 #3 列中的相同键对数据进行分组(排序顺序并不重要)。
现在,仅根据第 3 列中每个组的最小值对第 2 列进行排序。
例如:
对于第 4 组(在第 3 列中),第 2 列中的最小值是 15882592,它是 << 第 5 组(在第 3 列中)的最小值 15883889;因此第 4 组应该位于第 5 组之上。
同样,对于第 5 组(在第 3 列中),最小值在第 2 列中 15883889 << 第 1 组(在第 3 列中)最小值 15885010;因此第 5 组应该位于第 1 组之上。
所以,最后我必须首先对 col#1 进行分组,然后对 col#3 进行条件(分组)的 column#2。
输入数据:
2 15881989 6
2 15882091 6
2 15882148 6
2 15882328 6
2 15882364 6
2 15882451 8
2 15882454 8
2 15882493 8
2 15882592 4
2 15882601 4
2 15882607 4
2 15883765 4
2 15883782 4
2 15883783 4
2 15883785 4
2 15883861 4
2 15883862 4
2 15883889 5
2 15883894 5
2 15883904 5
2 15884457 5
2 15884525 5
2 15884546 4
2 15884550 4
2 15884582 4
2 15884613 4
2 15884649 4
2 15884742 4
2 15884965 4
2 15885010 1
2 15885024 1
2 15885061 4
2 15896126 4
3 15896174 4
3 15896152 4
3 15896128 3
3 15896224 3
3 15896258 3
3 15896406 3
预期输出:
2 15881989 6
2 15882091 6
2 15882148 6
2 15882328 6
2 15882364 6
2 15882451 8
2 15882454 8
2 15882493 8
2 15882592 4
2 15882601 4
2 15882607 4
2 15883765 4
2 15883782 4
2 15883783 4
2 15883785 4
2 15883861 4
2 15883862 4
2 15884546 4
2 15884550 4
2 15884582 4
2 15884613 4
2 15884649 4
2 15884742 4
2 15884965 4
2 15885061 4
2 15896126 4
2 15896128 4
2 15896152 4
2 15883889 5
2 15883894 5
2 15883904 5
2 15884457 5
2 15884525 5
2 15885010 1
2 15885024 1
3 15896128 3
3 15896224 3
3 15896258 3
3 15896406 3
3 15896152 4
3 15896174 4
谢谢
最佳答案
我使用 transform
min
作为新 key
df.assign(New=df.groupby(['col1','col3']).col2.transform('min')).sort_values(['col1','New'])
关于python - 使用 pandas 对数据进行排序 - 根据其他列中的值对第一列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48847508/