Python/Pandas:轴选项卡

2024-10-01 13:33:28 发布

您现在位置:Python中文网/ 问答频道 /正文

在jupyter笔记本中,我有一个从不同的合并数据集创建的数据帧。在

record_id | song_id | user_id   | number_times_listened

0          |ABC     | Shjkn4987 |          3
1          |ABC     | Dsfds2347 |          15
2          |ABC     | Fkjhh9849 |          7
3          |XYZ     | Shjkn4987 |          20
4          |XXX     | Shjkn4987 |          5
5          |XXX     | Swjdh0980 |          1

我想创建一个pivot table dataframe by song_id,列出用户的数量和听的次数的总和。在

我知道我需要用count和sum函数创建一个for循环,但是我不能使它工作。我也试过熊猫舱的pd.pivot_表. 在

^{pr2}$

或者像这样?在

total_user=[]
total_times_listened =[]
for x in data: 
    total_user.append(sum('user_id'))
    total_times_listened.append(count('number_times_listened'))
return df('song_id','total_user','total_times_listened')

Tags: 数据idnumberforsongcountxxxtotal
2条回答

可以将列名字典作为键传递,将函数列表作为值传递:

funcs = {'number_times_listened':['sum'], 'user_id':['count']}

然后只需在列song_id上使用df.groupby

^{pr2}$

输出:

number_times_listened   user_id
      sum   count
song_id         
ABC     25  3
XXX     6   2
XYZ     20  1

不确定这是否相关,但是示例中的列名和大小写与Python代码不匹配。在

在任何情况下,在Python 2.7上,我可以使用以下方法:

CSV文件:

record_id   song_id user_id number_times_listened
0   ABC Shjkn4987   3
1   ABC Dsfds2347   15
2   ABC Fkjhh9849   7
3   XYZ Shjkn4987   20
4   XXX Shjkn4987   5
5   XXX Swjdh0980   1

Python代码:

^{pr2}$

生成的透视表如下所示:

user_id  Dsfds2347  Fkjhh9849  Shjkn4987  Swjdh0980
song_id
ABC             15          7          3          0
XXX              0          0          5          1
XYZ              0          0         20          0

这就是你要找的吗?请记住,song_iduser_id对在数据集中是唯一的,因此在这个特定的示例中,聚合函数实际上并不执行任何操作,因为在这两个列上没有任何分组依据。在

相关问题 更多 >