我正在尝试将一些python panda转换为polar。我一直在尝试将pandaspivot_table函数转换为polar。以下是熊猫的工作代码。我似乎无法使用Polars枢轴函数获得相同的行为。polars pivot函数强制使用列参数,并将列值用作标头,而不是将列标签用作标头。我将在下面使用相同的输出,但使用Polars而不是Pandas。
df = pd.DataFrame({"obj" : ["ring", "shoe", "ring"], "price":["65", "42", "65"], "value":["53", "55", "54"], "date":["2022-02-07", "2022-01-07", "2022-03-07"]})
table = pd.pivot_table(df, values=['price','value','date'],index=['obj'], aggfunc={'price': pd.Series.nunique,'value':pd.Series.nunique,'date':pd.Series.nunique})
print(table)
输出以下内容:
date price value
obj
ring 2 1 2
shoe 1 1 1
在Polars中,我们不会为此使用透视表。相反,我们将使用groupby
和agg
函数。使用您的数据,它将是:
import polars as pl
df = pl.from_pandas(df)
df.groupby("obj").agg(pl.all().n_unique())
shape: (2, 4)
┌──────┬───────┬───────┬──────┐
│ obj ┆ price ┆ value ┆ date │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ u32 ┆ u32 ┆ u32 │
╞══════╪═══════╪═══════╪══════╡
│ ring ┆ 1 ┆ 2 ┆ 2 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ shoe ┆ 1 ┆ 1 ┆ 1 │
└──────┴───────┴───────┴──────┘
旋转和熔化
我们在Polars中使用pivot
函数的地方是将"长"格式的数据集汇总为"宽"格式的一个数据集。例如,让我们使用melt
函数将原始数据集转换为"长"格式。
df2 = df.melt(id_vars="obj", value_vars=["price", "date", "value"])
print(df2)
shape: (9, 3)
┌──────┬──────────┬────────────┐
│ obj ┆ variable ┆ value │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞══════╪══════════╪════════════╡
│ ring ┆ price ┆ 65 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ shoe ┆ price ┆ 42 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ ring ┆ price ┆ 65 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ ring ┆ date ┆ 2022-02-07 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ shoe ┆ date ┆ 2022-01-07 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ ring ┆ date ┆ 2022-03-07 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ ring ┆ value ┆ 53 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ shoe ┆ value ┆ 55 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┤
│ ring ┆ value ┆ 54 │
└──────┴──────────┴────────────┘
现在让我们使用pivot
将这个"长"格式的数据集总结回";宽";格式化并简单地计算值的数量。
df2.pivot(values='value', index='obj', columns='variable', aggregate_fn='count')
shape: (2, 4)
┌──────┬──────┬───────┬───────┐
│ obj ┆ date ┆ price ┆ value │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ u32 ┆ u32 ┆ u32 │
╞══════╪══════╪═══════╪═══════╡
│ ring ┆ 2 ┆ 2 ┆ 2 │
├╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ shoe ┆ 1 ┆ 1 ┆ 1 │
└──────┴──────┴───────┴───────┘
这是否有助于澄清pivot
功能的使用?