Python+pandas读取Excel文件并统计演员参演电影数量

Excel样本数据请参考Python读取Excel文件并统计演员参演电影

>>> import pandas as pd
>>> df = pd.read_excel('电影导演演员.xlsx')
>>> df
    电影名称   导演                  演员
0    电影1  导演1     演员1,演员2,演员3,演员4
1    电影2  导演2     演员3,演员2,演员4,演员5
2    电影3  导演3     演员1,演员5,演员3,演员6
3    电影4  导演1     演员1,演员4,演员3,演员7
4    电影5  导演2     演员1,演员2,演员3,演员8
5    电影6  导演3     演员5,演员7,演员3,演员9
6    电影7  导演4     演员1,演员4,演员6,演员7
7    电影8  导演1     演员1,演员4,演员3,演员8
8    电影9  导演2     演员5,演员4,演员3,演员9
9   电影10  导演3    演员1,演员4,演员5,演员10
10  电影11  导演1    演员1,演员4,演员3,演员11
11  电影12  导演2    演员7,演员4,演员9,演员12
12  电影13  导演3    演员1,演员7,演员3,演员13
13  电影14  导演4   演员10,演员4,演员9,演员14
14  电影15  导演5   演员1,演员8,演员11,演员15
15  电影16  导演6  演员14,演员4,演员13,演员16

>>> pairs = []
>>> for i in range(len(df)):
       actors = df.at[i, '演员'].split(',')
       for actor in actors:
           pair = (actor, df.at[i, '电影名称'])
           pairs.append(pair)

       
>>> pairs = sorted(pairs, key=lambda item:int(item[0][2:]))
>>> pairs
[('演员1', '电影1'), ('演员1', '电影3'), ('演员1', '电影4'), ('演员1', '电影5'), ('演员1', '电影7'), ('演员1', '电影8'), ('演员1', '电影10'), ('演员1', '电影11'), ('演员1', '电影13'), ('演员1', '电影15'), ('演员2', '电影1'), ('演员2', '电影2'), ('演员2', '电影5'), ('演员3', '电影1'), ('演员3', '电影2'), ('演员3', '电影3'), ('演员3', '电影4'), ('演员3', '电影5'), ('演员3', '电影6'), ('演员3', '电影8'), ('演员3', '电影9'), ('演员3', '电影11'), ('演员3', '电影13'), ('演员4', '电影1'), ('演员4', '电影2'), ('演员4', '电影4'), ('演员4', '电影7'), ('演员4', '电影8'), ('演员4', '电影9'), ('演员4', '电影10'), ('演员4', '电影11'), ('演员4', '电影12'), ('演员4', '电影14'), ('演员4', '电影16'), ('演员5', '电影2'), ('演员5', '电影3'), ('演员5', '电影6'), ('演员5', '电影9'), ('演员5', '电影10'), ('演员6', '电影3'), ('演员6', '电影7'), ('演员7', '电影4'), ('演员7', '电影6'), ('演员7', '电影7'), ('演员7', '电影12'), ('演员7', '电影13'), ('演员8', '电影5'), ('演员8', '电影8'), ('演员8', '电影15'), ('演员9', '电影6'), ('演员9', '电影9'), ('演员9', '电影12'), ('演员9', '电影14'), ('演员10', '电影10'), ('演员10', '电影14'), ('演员11', '电影11'), ('演员11', '电影15'), ('演员12', '电影12'), ('演员13', '电影13'), ('演员13', '电影16'), ('演员14', '电影14'), ('演员14', '电影16'), ('演员15', '电影15'), ('演员16', '电影16')]
>>> index = [item[0] for item in pairs]
>>> data = [item[1] for item in pairs]
>>> df1 = pd.DataFrame({'演员':index, '电影名称':data})
>>> result = df1.groupby('演员', as_index=False).count()
>>> result
      演员  电影名称
0    演员1    10
1   演员10     2
2   演员11     2
3   演员12     1
4   演员13     2
5   演员14     2
6   演员15     1
7   演员16     1
8    演员2     3
9    演员3    10
10   演员4    11
11   演员5     5
12   演员6     2
13   演员7     5
14   演员8     3
15   演员9     4

>>> result.columns = ['演员', '参演电影数量']
>>> result
      演员  参演电影数量
0    演员1      10
1   演员10       2
2   演员11       2
3   演员12       1
4   演员13       2
5   演员14       2
6   演员15       1
7   演员16       1
8    演员2       3
9    演员3      10
10   演员4      11
11   演员5       5
12   演员6       2
13   演员7       5
14   演员8       3
15   演员9       4

>>> result.sort_values('参演电影数量')
      演员  参演电影数量
3   演员12       1
6   演员15       1
7   演员16       1
1   演员10       2
2   演员11       2
4   演员13       2
5   演员14       2
12   演员6       2
8    演员2       3
14   演员8       3
15   演员9       4
11   演员5       5
13   演员7       5
0    演员1      10
9    演员3      10
10   演员4      11

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值