Pandas pivot(~)
方法將輸入DataFrame轉換為所謂的數據透視表。請檢查下麵的示例以了解數據透視表是什麽。
參數
1.index
| string
或 object
| optional
將成為結果數據透視表索引的列的標簽。
2. columns
| string
或 object
其值將成為新列標簽的列的標簽。
3. values
| string
或 object
或 list
| optional
其值將填充生成的數據透視表的列的標簽。
警告
如果您希望聚合values
(例如計算平均值、計數等),請改用 pivot_table(~)
。
返回值
代表數據透視表的新 DataFrame
。
例子
基本用法
考慮以下關於一段時間內人們身高的DataFrame:
df = pd.DataFrame({"name":["alex","bob","alex","bob","cathy"], "year":[2012,2012,2013,2013,2013], "height":[150,160,160,170,160]})
df
name year height
0 alex 2012 150
1 bob 2012 160
2 alex 2013 160
3 bob 2013 170
4 cathy 2013 160
創建一個數據透視表使用這個 DataFrame :
pd.pivot(df, index="name", columns="year", values="height")
year 2012 2013
name
alex 150.0 160.0
bob 160.0 170.0
cathy NaN 160.0
在此,請注意以下事項:
-
name
列成為新索引 -
year
列的值成為新的列標簽 -
height
列的值用於填充新的 DataFrame -
未找到的值(例如
2012
中 Cathy 的高度)導致NaN
。
多個值
考慮以下 DataFrame :
df = pd.DataFrame({"name":["alex","bob","alex","bob","cathy"], "year":[2012,2012,2013,2013,2013], "height":[150,160,160,170,160], "weight":[50,60,60,70,60]})
df
name year height weight
0 alex 2012 150 50
1 bob 2012 160 60
2 alex 2013 160 60
3 bob 2013 170 70
4 cathy 2013 160 60
在這裏,除了 height
列之外,我們還有一個 weight
列。
要使用這兩列生成數據透視表,請傳遞 values
的列表,如下所示:
pd.pivot(df, index="name", columns="year", values=["height","weight"])
height weight
year 2012 2013 2012 2013
name
alex 150.0 160.0 50.0 60.0
bob 160.0 170.0 60.0 70.0
cathy NaN 160.0 NaN 60.0
處理ValueError
考慮以下 DataFrame :
df = pd.DataFrame({"name":["alex","alex","bob"], "year":[2012,2012,2013], "height":[150,160,160]})
df
name year height
0 alex 2012 150
1 alex 2012 160
2 bob 2013 160
在這裏,我們有兩個名為 alex
的人,他們的身高均在 2012
中獲取。
創建數據透視表會產生 ValueError
,如下所示:
pd.pivot(df, index="name", columns="year", values="height")
ValueError: Index contains duplicate entries, cannot reshape
為了理解為什麽會發生這種情況,讓我們暫時將第二個 alex
重命名為 *
,並創建數據透視表:
df = pd.DataFrame({"name":["alex","*","bob"], "year":[2012,2012,2013], "height":[150,160,160]})
pd.pivot(df, index="name", columns="year", values="height")
year 2012 2013
name
* 160.0 NaN
alex 150.0 NaN
bob NaN 160.0
如果 *
是 alex
,那麽很容易看到結果索引將包含重複值,這在 Pandas 中是不希望的。這就是 ValueError
的原因。
那麽,此 ValueError
的修複方法是確保新索引列中不存在重複值。您可以使用 loc
和 iloc
等屬性來更新各個條目以避免重複。
相關用法
- Python Pandas pivot_table方法用法及代碼示例
- Python pandas.arrays.IntervalArray.is_empty用法及代碼示例
- Python pyspark.pandas.Series.dropna用法及代碼示例
- Python pyspark.pandas.groupby.SeriesGroupBy.unique用法及代碼示例
- Python pandas.DataFrame.ewm用法及代碼示例
- Python pandas.api.types.is_timedelta64_ns_dtype用法及代碼示例
- Python pandas.DataFrame.dot用法及代碼示例
- Python pandas.DataFrame.apply用法及代碼示例
- Python pyspark.pandas.Series.dt.weekday用法及代碼示例
- Python pyspark.pandas.DataFrame.select_dtypes用法及代碼示例
- Python pyspark.pandas.date_range用法及代碼示例
- Python pyspark.pandas.isnull用法及代碼示例
- Python pyspark.pandas.Series.hasnans用法及代碼示例
- Python pandas.DataFrame.combine_first用法及代碼示例
- Python pyspark.pandas.Series.rmul用法及代碼示例
- Python pyspark.sql.functions.grouping_id用法及代碼示例
- Python pyspark.pandas.Series.str.repeat用法及代碼示例
- Python pyspark.pandas.DataFrame.groupby用法及代碼示例
- Python pandas.Series.iloc用法及代碼示例
- Python pyspark.ml.feature.DCT用法及代碼示例
- Python pandas.Timestamp.to_numpy用法及代碼示例
- Python pyspark.sql.functions.hours用法及代碼示例
- Python pandas.Index.value_counts用法及代碼示例
- Python pyspark.pandas.Series.add_prefix用法及代碼示例
- Python pandas.DatetimeTZDtype用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas | pivot method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。