2017-07-25 24 views
4

我是熊猫新手,我想知道如何通过只提取部分行来清理数据。说我有一个数据帧如下:熊猫dataframe选择性数据清理帖子组

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

如何清洁的数据,使得对于每个相同的列1值的,我只提取前两行值,而忽略其余的(例如在C值,只有2014 SB和2014 PB是我得到的)?

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

谢谢

回答

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 
+3

很难顶这一个...;) – MaxU

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 
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 
+1

有趣的解决方案! :) – MaxU