加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – pandas dataframe interleaved reordering

发布时间:2020-12-20 11:06:17 所属栏目:Python 来源:网络整理
导读:对不起,不太好的标题可能更糟糕的问题. 我需要在pandas数据帧上执行一个超级简单的操作,但我显然错过了它的调用方式,因此无法找到正确的搜索关键字. 给出类似的数据帧 a b c0 0 46 141 0 7 142 0 46 193 0 7 194 1 46 145 1 7 146 1 46 197 1 7 19 我需要重
对不起,不太好的标题可能更糟糕的问题.

我需要在pandas数据帧上执行一个超级简单的操作,但我显然错过了它的调用方式,因此无法找到正确的搜索关键字.

给出类似的数据帧

a   b   c
0  0  46  14
1  0   7  14
2  0  46  19
3  0   7  19
4  1  46  14
5  1   7  14
6  1  46  19
7  1   7  19

我需要重新排序行以获取

a   b   c
0  0  46  14
4  1  46  14
1  0   7  14
5  1   7  14
2  0  46  19
6  1  46  19
3  0   7  19
7  1   7  19

另一个简单但可能不那么含糊的例子.我想从中得到

a
0  0
1  0
2  1
3  1
4  2
5  2

a
0  0
2  1
4  2
1  0
3  1
5  2

编辑:关于完整图片的一些澄清

对于它的价值,第一个例子中的数据帧是字典的笛卡尔积

'a': [0,1],'b': array([46,7]),'c': array([14,19])}

[{'a': 0,'b': 46,'c': 14},{'a': 0,'b': 7,'c': 19},{'a': 1,'c': 19}]

我需要对其进行排序,以便对于每个参数组合,所有值都被分组并循环在一起.

解决方法

如果要进行排序,以便所有第0次看到值都是第一次,然后是第1次,依此类推,则可以对感兴趣的列进行分组并对累计计数进行排序:

In [119]: df.loc[df.groupby("a").cumcount().sort_values(kind='mergesort').index]
Out[119]: 
   a
0  0
2  1
4  2
1  0
3  1
5  2

这是因为

In [120]: df.groupby("a").cumcount()
Out[120]: 
0    0
1    1
2    0
3    1
4    0
5    1
dtype: int64

In [121]: df.groupby("a").cumcount().sort_values(kind='mergesort')
Out[121]: 
0    0
2    0
4    0
1    1
3    1
5    1
dtype: int64

请注意,我们使用kind =’mergesort’来保证稳定性,如果您想转向[1,2,1] – >,如果需要,您可以先对原始帧进行排序. [0,1,2] – > [0,2].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读