我是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
谢谢
答案 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