python - 在数据框中获取每列仅更改 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]
解决方案
您可以转移记录。移位后,您可以比较值以返回 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