使用 IMDB 数据集查询交叉表

Query on crosstab using IMDB dataset

我用的是IMDB数据集,最后提到了headers

问题: 1. 捕捉历年电影片名字母数量趋势的报告。 2. 视频发布年份和长度所属的分位数之间的交叉表。结果应包含年份、min_length、max_length、num_videos_less_than25Percentile、num_videos_25_50Percentile、num_videos_50_75Percentile、num_videos_greaterthan75Precentile

第一部分很容易解决。对于第二部分,作为交叉表的初学者,我知道语法但有人可以指导如何继续解决方案。

如果需要更多信息,请告诉我。

    imdb.columns
Index(['fn', 'tid', 'title', 'wordsInTitle', 'url', 'imdbRating',
       'ratingCount', 'duration', 'year', 'type', 'nrOfWins',
       'nrOfNominations', 'nrOfPhotos', 'nrOfNewsArticles', 'nrOfUserReviews',
       'nrOfGenre', 'Action', 'Adult', 'Adventure', 'Animation', 'Biography',
       'Comedy', 'Crime', 'Documentary', 'Drama', 'Family', 'Fantasy',
       'FilmNoir', 'GameShow', 'History', 'Horror', 'Music', 'Musical',
       'Mystery', 'News', 'RealityTV', 'Romance', 'SciFi', 'Short', 'Sport',
       'TalkShow', 'Thriller', 'War', 'Western'],
      dtype='object')

可以用groupby解决:

import pandas as pd
import numpy as np
df = pd.read_csv('https://raw.githubusercontent.com/mandarkadam/Data-Mining-IMDB-score/master/imdb-movies-dataset%20-%20test.csv')

df.groupby('year').duration.agg(
    min_length='min',
    max_length='max',
    num_videos_less_than25Percentile=lambda x: np.count_nonzero((x<x.quantile(.25)).values),
    num_videos_25_50Percentile=lambda x: np.count_nonzero(((x>=x.quantile(.25))&(x<x.quantile(.5))).values),
    num_videos_50_75Percentile=lambda x: np.count_nonzero(((x>=x.quantile(.5))&(x<x.quantile(.75))).values),
    num_videos_greaterthan75Precentile=lambda x: np.count_nonzero((x>=x.quantile(.75)).values)
).astype('Int64')

结果:

        min_length  max_length  num_videos_less_than25Percentile  num_videos_25_50Percentile  num_videos_50_75Percentile  num_videos_greaterthan75Precentile
year                                                                                                                                                        
1888.0           2           2                                 0                           0                           0                                   1
1894.0          22          22                                 0                           0                           0                                   1
1904.0        <NA>        <NA>                                 0                           0                           0                                   0
1910.0         660         660                                 0                           0                           0                                   1
1911.0        1080        1080                                 0                           0                           0                                   1
...            ...         ...                               ...                         ...                         ...                                 ...
2009.0        3000        7080                                 4                           2                           5                                   4
2010.0        3120        6840                                 1                           1                           1                                   2
2011.0        5580        7620                                 2                           1                           1                                   2
2012.0        1800        6000                                 1                           0                           1                                   1
2014.0        1800        1800                                 0                           0                           0                                   1

[94 rows x 6 columns]