首页 > 解决方案 > 在数据框中获取每列仅更改 1 个或更多值的相似行

问题描述

我的问题如下:假设你有一个数据框 NxM 填充二进制数:

pd.DataFrame([[0, 0, 0, 1, 0, 1],
              [0, 1, 0, 1, 0, 1],
              [1, 0, 0, 0, 0, 0],
              [1, 1, 0, 0, 0, 0],
              [0, 0, 0, 0, 1, 0],
              [1, 1, 0, 0, 1, 0]]

我想获取两个相似行的索引或行(按行迭代),每列仅更改 1 个值或更多。例如,第一行的相似性是:

第 0 行:[0, 0, 0, 1, 0, 1]-> 预期输出[0, 1, 0, 1, 0, 1]
第 2 行:[1, 0, 0, 0, 0, 0]-> 预期输出[1, 1, 0, 0, 0, 0]

第 2 行:[1, 0, 0, 0, 0, 0]-> 预期输出[1, 1, 0, 0, 1, 0]
第 4 行:[0, 0, 0, 0, 1, 0]-> 预期输出[1, 1, 0, 0, 1, 0]

标签: pythonpython-3.xpandas

解决方案


您可以转移记录。移位后,您可以比较值以返回 True/False。在此之后,您计算真实值。我为示例设置了 true==1 ,因此您在行之间恰好有 1 次更改。

我不确定你的具体结果应该是什么样子,但也许你可以加强这一点。

print(df)

print(df.shift(-1))

df[df[df == df.shift(-1)].isna().sum(axis=1) == 1]
   0  1  2  3  4  5
0  0  0  0  1  0  1
1  0  1  0  1  0  1
2  1  0  0  0  0  0
3  1  1  0  0  0  0
4  0  0  0  0  1  0
5  1  1  0  0  1  0

     0    1    2    3    4    5
0  0.0  1.0  0.0  1.0  0.0  1.0
1  1.0  0.0  0.0  0.0  0.0  0.0
2  1.0  1.0  0.0  0.0  0.0  0.0
3  0.0  0.0  0.0  0.0  1.0  0.0
4  1.0  1.0  0.0  0.0  1.0  0.0
5  NaN  NaN  NaN  NaN  NaN  NaN

Out[54]: 
   0  1  2  3  4  5
0  0  0  0  1  0  1
2  1  0  0  0  0  0

推荐阅读