选择pandas多索引数据框中只有1个条目的元素

时间:2018-04-05 18:49:25

标签: python pandas dataframe group-by

我有以下数据框df

import pandas as pd
df = pd.DataFrame([[1, 1, 2, 2, 2, 3,4,5,5,5,6,6,6,6], 
                   list('AABBBCDEEEFFFF'), 
                   [1, 2, 3, 4, 5, 6,7,8,9,10,11,12,13,14],
                   [1, 2, 3, 4, 5, 6,7,8,9,11,12,11,11,11]]).T
df.columns = ['col1','col2','col3','col4']

df
Out[4]: 
   col1 col2 col3 col4
0     1    A    1    1
1     1    A    2    2
2     2    B    3    3
3     2    B    4    4
4     2    B    5    5
5     3    C    6    6
6     4    D    7    7
7     5    E    8    8
8     5    E    9    9
9     5    E   10   11
10    6    F   11   12
11    6    F   12   11
12    6    F   13   11
13    6    F   14   11

我按照以下顺序按照列进行分组

df.groupby(['col1','col2','col3']).size()

Out[7]: 
col1  col2  col3
1     A     1       1
            2       1
2     B     3       1
            4       1
            5       1
3     C     6       1
4     D     7       1
5     E     8       1
            9       1
            10      1
6     F     11      1
            12      1
            13      1
            14      1

如何为只有一个条目的组提取col3的值?

df_return
Out[4]: 
   col3
0     6
1     7

2 个答案:

答案 0 :(得分:2)

您可以将col1col2传递给.groupby,然后使用.filter选择长度(即大小)等于1的组。< / p>

df_return = df.groupby(['col1','col2']).filter(lambda x: len(x) == 1)['col3']

print df_return
# 5    6
# 6    7

答案 1 :(得分:2)

使用duplicated

确定我们为什么需要群组
df[~df.duplicated(('col1','col2'),keep=False)]
Out[1352]: 
  col1 col2 col3 col4
5    3    C    6    6
6    4    D    7    7

df.loc[~df.duplicated(('col1','col2'),keep=False),'col3']
Out[1353]: 
5    6
6    7
Name: col3, dtype: object

drop_duplicates

df.drop_duplicates(['col1','col2'],keep=False).col3
Out[1355]: 
5    6
6    7
Name: col3, dtype: object