检查DF中的列组合以返回唯一行

时间:2016-04-12 20:40:30

标签: python pandas itertools

for a, b in itertools.combinations(number_of_notes_cols, 2):
    weekly_meetings_difference = all_meetings_data[(all_meetings_data[a] != all_meetings_data[b]) == True]

上面的代码用于工作:它将返回所有columns_meetings_difference列的列组合的所有行,其中列值(如果对于任何列对,则为true)。现在,返回weekly_meetings_difference会给我一些但不是全部列值更改的行。

使用一些代码进行编辑:

之前(当一切似乎工作正常时):

Number of Notes 03112016    Number of Notes 03192016    Number of Notes 03272016    Number of Notes 04042016
Meeting Name                
X      12.0 NaN NaN NaN
Y       5.0 5.0 NaN NaN
Z       2.0 NaN NaN NaN
W       NaN 6.0 713.0 740.0

之后(现在我已经更新了我想要信息的原始数据框):

Number of Notes 03112016    Number of Notes 03192016    Number of Notes 03272016    Number of Notes 04042016    Number of Notes 04122016    Emails 04122016
Meeting Name                        
A   37.0 37.0 38.0 38.0 37.0
X   12.0 NaN NaN NaN NaN NaN
Y   5.0  5.0 NaN NaN NaN NaN
Z   2.0  NaN NaN NaN NaN NaN

既然我已经完成了这个编辑,我注意到在将额外的列添加到数据框之后添加了行A以及要删除的行W(它们都应该每次都显示)

1 个答案:

答案 0 :(得分:1)

首先,让我确保我理解这个问题。您是否在数据框中查找具有多个唯一值的行?也就是说,该值至少在行中更改一次。

import pandas as pd
df = pd.DataFrame({'a': [1, 1, 1], 'b': [1, 2, 3], 'c': [1, 1, 3]})

    a  b  c
0|  1  1  1
1|  1  2  1
2|  1  3  3

在上面的数据框中,您需要第1行和第2行。如果是这样,我会执行以下操作:

df.apply(pd.Series.nunique, axis=1)

返回数据帧每行中唯一值的数量:

0    1
1    2
2    2
dtype: int64

使用该结果,我们可以选择我们关心的行:

df[df.apply(pd.Series.nunique, axis=1) > 1]

返回预期的内容:

    a  b  c
1|  1  2  1
2|  1  3  3

这是你所追求的,还是别的什么?如果你澄清,很高兴编辑。