如何将 value_counts() 应用于 Polars Python 中的多列?

ViS*_*iSa 2 apply python-polars

我正在尝试在极坐标上进行apply简单的value_counts()多列操作dataframe,但出现错误。

import polars as pl
import pandas as pd
Run Code Online (Sandbox Code Playgroud)

数据:

sample_df = pl.DataFrame({'sub-category': ['tv','mobile','tv','wm','micro','wm'],
              'category': ['electronics','mobile','electronics','electronics','kitchen','electronics']})
Run Code Online (Sandbox Code Playgroud)

失败的尝试:

#1
sample_df.apply(value_counts())

#2
sample_df.apply(lambda x: x.value_counts())

#3
sample_df.apply(lambda x: x.to_series().value_counts())

#4
sample_df.select(pl.col(['sub-category','category'])).apply(lambda x: x.value_counts())

#5
sample_df.select(pl.col(['sub-category','category'])).apply(lambda x: x.to_series().value_counts())
Run Code Online (Sandbox Code Playgroud)

但如果我将其转换为Pandas数据框,那么它就可以工作:

sample_df.to_pandas().apply(lambda x: x.value_counts())
Run Code Online (Sandbox Code Playgroud)

jqu*_*ous 5

你可以.melt+.groupby().count()

\n
df.melt(variable_name="column").groupby(pl.all()).count()\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (7, 3)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 column       \xe2\x94\x86 value       \xe2\x94\x86 count \xe2\x94\x82\n\xe2\x94\x82 ---          \xe2\x94\x86 ---         \xe2\x94\x86 ---   \xe2\x94\x82\n\xe2\x94\x82 str          \xe2\x94\x86 str         \xe2\x94\x86 u32   \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 sub-category \xe2\x94\x86 mobile      \xe2\x94\x86 1     \xe2\x94\x82\n\xe2\x94\x82 category     \xe2\x94\x86 kitchen     \xe2\x94\x86 1     \xe2\x94\x82\n\xe2\x94\x82 sub-category \xe2\x94\x86 wm          \xe2\x94\x86 2     \xe2\x94\x82\n\xe2\x94\x82 sub-category \xe2\x94\x86 tv          \xe2\x94\x86 2     \xe2\x94\x82\n\xe2\x94\x82 sub-category \xe2\x94\x86 micro       \xe2\x94\x86 1     \xe2\x94\x82\n\xe2\x94\x82 category     \xe2\x94\x86 mobile      \xe2\x94\x86 1     \xe2\x94\x82\n\xe2\x94\x82 category     \xe2\x94\x86 electronics \xe2\x94\x86 4     \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

您可以添加.pivot以进行从长到宽的重塑。

\n
df.melt().groupby(pl.all()).count().pivot(\n   values = "count",\n   index = "value",\n   columns = "column",\n   aggregate_function = None\n)\n
Run Code Online (Sandbox Code Playgroud)\n
shape: (6, 3)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 value       \xe2\x94\x86 sub-category \xe2\x94\x86 category \xe2\x94\x82\n\xe2\x94\x82 ---         \xe2\x94\x86 ---          \xe2\x94\x86 ---      \xe2\x94\x82\n\xe2\x94\x82 str         \xe2\x94\x86 u32          \xe2\x94\x86 u32      \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 mobile      \xe2\x94\x86 1            \xe2\x94\x86 1        \xe2\x94\x82\n\xe2\x94\x82 wm          \xe2\x94\x86 2            \xe2\x94\x86 null     \xe2\x94\x82\n\xe2\x94\x82 micro       \xe2\x94\x86 1            \xe2\x94\x86 null     \xe2\x94\x82\n\xe2\x94\x82 kitchen     \xe2\x94\x86 null         \xe2\x94\x86 1        \xe2\x94\x82\n\xe2\x94\x82 electronics \xe2\x94\x86 null         \xe2\x94\x86 4        \xe2\x94\x82\n\xe2\x94\x82 tv          \xe2\x94\x86 2            \xe2\x94\x86 null     \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n