我有一个多索引数据帧,大致如下所示:
import pandas as pd
test = pd.DataFrame({('A', 'a'):[1,2,3,4,5], ('A', 'b'):[5,4,3,2,1], ('B', 'a'):[5,2,3,4,1], ('B','b'):[1,4,3,2,5]})
>>> Output
A B
a b a b
0 1 5 5 1
1 2 4 2 4
2 3 3 3 3
3 4 2 4 2
4 5 1 1 5
在此数据帧中,第0行和第5行是对称的,即如果第0行的整个A
列和B
列被翻转,则第0行和第5行将变得与第5行相同。类似地,第二行与自身对称
我计划从我的原始数据帧中删除这些行,从而使其“非对称”。具体方案如下:
我的尝试是首先将四个列表压缩成一个元组列表,通过一个简单的if
-语句删除对称元组,解压缩它们,然后将它们合并回一个数据帧。然而,这被证明是低效的,使得它无法对大型数据帧进行缩放
如何以有效的方式实现这一点?我想使用几种内置的pandas
方法是必要的,但它似乎相当复杂
纳木冬蒂
尝试以下解决方案:
其思想是创建具有奇数索引的翻转行,以便在重新编制索引后将其放置在原始行下。然后删除重复项,保留索引较低的行。对于清理,只需删除具有奇数索引的剩余行
请注意,行
[3,3,3,3]
保持不变。应该有一个单独的过滤器来处理自对称行。由于您对自对称的定义不清楚(其他行也有一定程度的对称性),所以我将这部分留给您。应该是直截了当的相关问题 更多 >
编程相关推荐