Pandas数据帧选择性数据清理组groupby

时间:2017-07-25 13:58:59

标签: pandas dataframe

我是pandas的新手,我想知道如何通过仅提取部分行来清理数据。假设我有一个数据帧如下:

column1      date    key
A            2016    SB
A            2017    B
B            2015    SB
C            2014    SB
C            2014    PB
C            2015    B
C            2016    SB

我如何清理数据,以便对于每个相同的column1值,我只提取前两行值并忽略其余值(例如在C值上,只有2014 SB和2014 PB是我得到的)?

column1      date    key
A            2016    SB
A            2017    B
B            2015    SB
C            2014    SB
C            2014    PB

谢谢

3 个答案:

答案 0 :(得分:7)

您需要GroupBy.head,请同时查看docs

df = df.groupby('column1').head(2)
print (df)
  column1  date key
0       A  2016  SB
1       A  2017   B
2       B  2015  SB
3       C  2014  SB
4       C  2014  PB

答案 1 :(得分:4)

In [82]: df.loc[df.groupby('column1').cumcount().lt(2)]
Out[82]:
  column1  date key
0       A  2016  SB
1       A  2017   B
2       B  2015  SB
3       C  2014  SB
4       C  2014  PB

答案 2 :(得分:4)

出于对@ MaxU声明的真实性的沮丧......我想出了这个荒谬的解决方案。

df.groupby('column1').head(2)
     

很难超越这个......;) - MaxU

df.drop_duplicates('column1').append(
    df[df.duplicated('column1')].drop_duplicates('column1')
)

  column1  date key
0       A  2016  SB
2       B  2015  SB
3       C  2014  SB
1       A  2017   B
4       C  2014  PB