pandas.DataFrame.pivot_table建立一個pivot table。以DataFrame中的某一列或某幾列分别作為index和columns,構造一個新的DataFrame。
Parameter:
- values:column to aggregate, optional
- index:column, Grouper, array, or list of the previous
- columns:column, Grouper, array, or list of the previous
- aggfunc:function, list of functions, dict, default numpy.mean
- fill_value:scalar, default None. Value to replace missing values with
- margins:boolean, default False. Add all row / columns (e.g. for subtotal / grand totals)
- margins_name: string, default ‘All’. Name of the row / column that will contain the totals when margins is True.
下面是一個電影評分的例子:
userId、movie和raing分别表示使用者Id、電影和評分,例如,第0行表示Id為1的使用者對電影m1評分是3,但是這樣的表格看起來比較混亂,尤其是當userId和movie亂序時,我們可以将它轉化為index為使用者Id,columns為電影的表格:
import pandas as pd
import numpy as np
data = {'userId': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
'movie': ['m1', 'm2', 'm3', 'm4', 'm5',
'm1', 'm2', 'm3', 'm4', 'm5',
'm1', 'm2', 'm3', 'm4', 'm5'],
'rating': [3, 4, 5, 4, 4, 2, 3, 5, 3, 4, 3, 2, 3, 4, 5]}
df = pd.DataFrame(data)
df_utility = df.pivot_table(values='rating', index='userId', columns='movie',
aggfunc=np.sum, margins=False)
df_utility:
這樣以來,使用者對電影的評分就一目了然了。上面表格中的每一行表示一位使用者對所有電影的評分,每一清單示所有使用者對一部電影的評分。
把參數margins改為True後:
import pandas as pd
import numpy as np
data = {'userId': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3],
'movie': ['m1', 'm2', 'm3', 'm4', 'm5',
'm1', 'm2', 'm3', 'm4', 'm5',
'm1', 'm2', 'm3', 'm4', 'm5'],
'rating': [3, 4, 5, 4, 4, 2, 3, 5, 3, 4, 3, 2, 3, 4, 5]}
df = pd.DataFrame(data)
df_utility = df.pivot_table(values='rating', index='userId', columns='movie',
aggfunc=np.sum, margins=True)
df_utility: