如何根据另一列找到列的前5个值?

时间:2017-11-16 14:10:59

标签: python pandas

我在IMDB数据集上练习,我希望找到预算最多的顶级类型。

实际上,在需要箱图并且流派众多的情况下,这将非常有用。因此,将它们最小化到最昂贵会使箱形图更加清晰。

i tried this: df.sort_values(by=["genres","budget"]) 

但是不对。

1 个答案:

答案 0 :(得分:1)

如果需要返回所有列:

我认为您需要sort_values + groupby + head

df=df.sort_values(by=["genres","budget"], ascending=[True, False]).groupby("genres").head(5)

nlargest

df = df.groupby('genres', group_keys=False).apply(lambda x: x.nlargest(5, "budget"))

如果只需要重新调整genresbudget列:

df = df.groupby('genres')["budget"].nlargest(2).reset_index(level=1, drop=True).reset_index()

样品:

df = pd.DataFrame({'A':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'budget':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'genres':list('aaabbb')})

print (df)
   A  B  C  E  budget genres
0  a  4  7  5       1      a
1  b  5  8  3       3      a
2  c  4  9  6       5      a
3  d  5  4  9       7      b
4  e  5  2  2       1      b
5  f  4  3  4       0      b
df1=df.sort_values(by=["genres","budget"], ascending=[True, False]).groupby("genres").head(2)

df1 = df.groupby('genres', group_keys=False).apply(lambda x: x.nlargest(2, "budget"))

print (df1)
   A  B  C  E  budget genres
2  c  4  9  6       5      a
1  b  5  8  3       3      a
3  d  5  4  9       7      b
4  e  5  2  2       1      b
df1=df.groupby('genres')["budget"].nlargest(2).reset_index(level=1, drop=True).reset_index()
print (df1)
  genres  budget
0      a       5
1      a       3
2      b       7
3      b       1

---

如果需要具有每种类型的badget总和的顶级类型:

df = pd.DataFrame({'A':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'budget':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'genres':list('aabbcc')})

print (df)
   A  B  C  E  budget genres
0  a  4  7  5       1      a
1  b  5  8  3       3      a
2  c  4  9  6       5      b
3  d  5  4  9       7      b
4  e  5  2  2       1      c
5  f  4  3  4       0      c

df = df.groupby('genres')['budget'].sum().nlargest(2)
print (df)
genres
b    12
a     4
Name: budget, dtype: int64

详情:

print (df.groupby('genres')['budget'].sum())
genres
a     4
b    12
c     1
Name: budget, dtype: int64