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]. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |