others - 比较 Pandas dataframe的行( 行有重叠值)

我有一个21列的pandas数据框,

我尝试将每一行转换为索引对象,并对两行执行设置操作,示例。


row1 = pd.Index(sample_data[0])
row2 = pd.Index(sample_data[1])
row1 - row2 

返回一个索引对象,该对象包含第一行唯一的值,然后我可以手动推断哪些列有唯一值。

该如何以编程方式获取这些值,在初始数据帧中对应的列标题?

时间: 作者:

你不需要索引,只需比较两行,使用列表推导过滤一个列。


df = pd.DataFrame({"col1": np.ones(10),"col2": np.ones(10),"col3": range(2,12)})
row1 = df.irow(0)
row2 = df.irow(1)
unique_columns = row1 != row2
cols = [colname for colname, unique_column in zip(df.columns, bools) if unique_column]
print cols # ['col3']

如果知道每列的标准值,可以将所有行转换为布尔值列表,即:


standard_row = np.ones(3)
columns = df.columns
unique_columns = df.apply(lambda x: x != standard_row, axis=1)
unique_columns.apply(lambda x: [col for col, unique_column in zip(columns, x) if unique_column], axis=1)

作者:

下面是仅返回前两行不同的列的快速解决方案。


In [13]: df = pd.DataFrame(zip(*[range(5), list('abcde'), list('aaaaa'),
... list('bbbbb')]), columns=list('ABCD'))

In [14]: df
Out[14]: 
 A B C D
0 0 a a b
1 1 b a b
2 2 c a b
3 3 d a b
4 4 e a b

In [15]: df[df.columns[df.iloc[0] != df.iloc[1]]]
Out[15]: 
 A B
0 0 a
1 1 b
2 2 c
3 3 d
4 4 e

在整个frame中查找所有多个唯一值列的解决方案。


In [33]: df[df.columns[df.apply(lambda s: len(s.unique()) > 1)]]
Out[33]: 
 A B
0 0 a
1 1 b
2 2 c
3 3 d
4 4 e

作者:
...