我正在从csv中读取此数据,并试图找到排名前2位的频道及其视频以及它们的收入和观看次数总和。 我还想根据渠道的最高收入对结果进行排序。 我该如何在python中执行此操作,我在mysql中尝试了此操作对我不起作用。任何帮助表示赞赏。
输入
channel_name video views revenue
abc v1 1 4
abc v2 1 5
abc v2 1 5
efg v3 2 3
ijk v4 3 2
答案 0 :(得分:0)
您可以使用熊猫grouby()
和sum()
函数。结果将已经升序排列:
In [4]: df
Out[4]:
channel_name video views revenue
0 abc v1 1 4
1 abc v2 1 5
2 abc v2 1 5
3 efg v3 2 3
4 ijk v4 3 2
In [5]: grouped = df.groupby(['channel_name', 'video'])
In [6]: grouped.sum()
Out[6]:
views revenue
channel_name video
abc v1 1 4
v2 2 10
efg v3 2 3
ijk v4 3 2
如果您希望索引成为列:
In [7]: grouped.sum().reset_index()
Out[7]:
channel_name video views revenue
0 abc v1 1 4
1 abc v2 2 10
2 efg v3 2 3
3 ijk v4 3 2
答案 1 :(得分:0)
尝试一下:
df.groupby(['channel_name','video'])[['views','revenue']].sum()
答案 2 :(得分:0)
第一个选项:
data_group = data.groupby(by=['channel_name', 'video']).sum()
data_group.head()
views revenue
channel_name video
abc v1 1 4
v2 2 10
efg v3 2 3
ijk v4 3 2
第二个选项:
data_group = data.groupby(by=['channel_name', 'video']).agg({'views': 'sum', 'revenue': 'sum'})
data_group.head()
views revenue
channel_name video
abc v1 1 4
v2 2 10
efg v3 2 3
ijk v4 3 2
保留列的第三种选择:
data_group = data_group.reset_index()
data_group.head()
channel_name video views revenue
0 abc v1 1 4
1 abc v2 2 10
2 efg v3 2 3
3 ijk v4 3 2