我知道我可以使用以下方法找到重复的列:
df.T.duplicated()
我想知道重复列是重复列的索引。例如,C
和D
都是下面A
的副本:
df = pd.DataFrame([[1,0,1,1], [2,0,2,2]], columns=['A', 'B', 'C', 'D'])
A B C D
0 1 0 1 1
1 2 0 2 2
我想要类似的东西:
duplicate_index = pd.Series([None, None, 'A', 'A'], ['A', 'B', 'C', 'D'])
答案 0 :(得分:3)
我不知道duplicated
是否可以选择提供有关具有相同数据的第一行的信息。我的想法是使用groupby
和transform
,例如:
arr_first = (df.T.reset_index().groupby([col for col in df.T.columns])['index']
.transform(lambda x: x.iloc[0]).values)
在您的示例中,arr_first
等于array(['A', 'B', 'A', 'A'], dtype=object)
,并且由于它们的顺序与df.columns
相同,因此要获得预期的输出,可以使用np.where
,例如:
duplicate_index = pd.Series(pd.np.where(arr_first != df.columns, arr_first, None),df.columns)
duplicate_index
的结果是
A None
B None
C A
D A
dtype: object
答案 1 :(得分:2)
测试两个数字列是否重复的另一种更直接的方法是测试相关矩阵,该矩阵测试所有成对的列。这是代码:
import pandas as pd
df = pd.DataFrame([[1,0,1,1], [2,0,2,2]], columns=['A', 'B', 'C', 'D'])
# compute the correlation matrix
cm = df.corr()
cm
这显示了所有列与其他列(包括其自身)之间的相关性矩阵。如果一列与另一列为1:1,则值为1.0。
要查找所有与A重复的列,则:
cm['A']
A 1.0
B NaN
C 1.0
D 1.0
如果您有分类(字符串对象)而不是数字,则可以制作一个互相关表。
希望这会有所帮助!