假设我有四列,每列中有字符串(pandas df)。 如果我想比较它们是否都相同,我想出了这样的东西:
df['same_FB'] = np.where( (df['FB_a'] == df['FB_b']) & (df['FB_a'] == df['FB_c']) & (df['FB_a'] == df['FB_d']), 1,0)
它工作正常,但看起来不太好,如果我必须添加第五或第六列,它会变得更加丑陋。 是否有另一种方法来测试所有列是否相同? 或者,我可以计算这四列中的不同值。
答案 0 :(得分:2)
您可以使用 +
DataFrame.eq
:
x,*y = ['FB_a', 'FB_b', 'Fb_c', 'FB_d']
df['same_FB'] = df[y].eq(df[x], axis=0).all(1).view('i1')
或者您可以使用 nunique
:
c = ['FB_a', 'FB_b', 'Fb_c', 'FB_d']
df['same_FB'] = df[c].nunique(axis=1, dropna=False).eq(1).view('i1')
示例:
print(df)
A B C D E
0 10 1 1 1 1
1 20 2 2 2 2
2 30 3 3 3 3
3 40 4 4 4 4
x,*y = ['B', 'C', 'D', 'E']
df['same'] = df[y].eq(df[x], axis=0).all(1).view('i1')
print(df)
A B C D E same
0 10 1 1 1 1 1
1 20 2 2 2 2 1
2 30 3 3 3 3 1
3 40 4 4 4 4 1
答案 1 :(得分:1)
您可以使用链式 Python 逻辑。代码如下:
df['same_FB'] = np.where((df['FB_a'] == df['FB_b'] == df['FB_c'] == df['FB_d']), 1,0)