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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。