Pandas:分组后获取前 10 个值
Pandas: Get top 10 values AFTER grouping
我有一个 pandas 数据框,其中有一列 'id' 和一列 'value'。它已经按第一个 id(升序)然后按值(降序)排序。我需要的是每个 id 的前 10 个值。
我以为像下面这样的东西会起作用,但它不起作用:
df.groupby("id", as_index=False).aggregate(lambda (index,rows) : rows.iloc[:10])
我得到的只是一个 ID 列表,值列(以及我在问题中省略的其他列)已经不存在了。
在不遍历每一行并将前十行附加到另一个数据结构的情况下如何完成它有什么想法吗?
这是您要找的吗?
df.groupby('id').head(10)
我想通过给出和示例数据框来回答这个问题:
df = pd.DataFrame(np.array([['a','a','b','c','a','c','b'],[4,6,1,8,9,4,1],[12,11,7,1,5,5,7],[123,54,146,96,10,114,200]]).T,columns=['item','date','hour','value'])
df['value'] = pd.to_numeric(df['value'])
这为您提供了一个数据框
item date hour value
a 4 12 123
a 6 11 54
b 1 7 146
c 8 1 96
a 9 5 10
c 4 5 114
b 1 7 200
现在在下面分组并显示分组项目的前 2 个值。
df.groupby(['item'])['value'].head(2)
我有一个 pandas 数据框,其中有一列 'id' 和一列 'value'。它已经按第一个 id(升序)然后按值(降序)排序。我需要的是每个 id 的前 10 个值。
我以为像下面这样的东西会起作用,但它不起作用:
df.groupby("id", as_index=False).aggregate(lambda (index,rows) : rows.iloc[:10])
我得到的只是一个 ID 列表,值列(以及我在问题中省略的其他列)已经不存在了。
在不遍历每一行并将前十行附加到另一个数据结构的情况下如何完成它有什么想法吗?
这是您要找的吗?
df.groupby('id').head(10)
我想通过给出和示例数据框来回答这个问题:
df = pd.DataFrame(np.array([['a','a','b','c','a','c','b'],[4,6,1,8,9,4,1],[12,11,7,1,5,5,7],[123,54,146,96,10,114,200]]).T,columns=['item','date','hour','value'])
df['value'] = pd.to_numeric(df['value'])
这为您提供了一个数据框
item date hour value
a 4 12 123
a 6 11 54
b 1 7 146
c 8 1 96
a 9 5 10
c 4 5 114
b 1 7 200
现在在下面分组并显示分组项目的前 2 个值。
df.groupby(['item'])['value'].head(2)