我想在多列上执行逐行比较。我想要一个系列,指示一行中的所有条目(多个列)是否与前一行相同。
假设我有以下数据框
import pandas as pd
df = pd.DataFrame({'A' : [1, 1, 1, 2, 2],
'B' : [2, 2, 3, 3, 3],
'C' : [1, 1, 1, 2, 2]})
我可以比较所有列的所有行
>>> df.diff().eq(0)
A B C
0 False False False
1 True True True
2 True False True
3 False True False
4 True True True
这给出了一个单独比较每个系列的数据帧。我想要的是比较一个系列中的所有列。
我可以通过循环来实现这个目标
compare_all = df.diff().eq(0)
compare_tot = compare_all[compare_all.columns[0]]
for c in compare_all.columns[1:]:
compare_tot = compare_tot & compare_all[c]
这给出了
>>> compare_tot
0 False
1 True
2 False
3 False
4 True
dtype: bool
正如所料。
是否可以通过单线程实现这一点,即没有环路?
答案 0 :(得分:2)
>>> (df == df.shift()).all(axis=1)
0 False
1 True
2 False
3 False
4 True
dtype: bool
答案 1 :(得分:1)
您需要all
In [1306]: df.diff().eq(0).all(1)
Out[1306]:
0 False
1 True
2 False
3 False
4 True
dtype: bool