jbs*_*ssm 16 python pandas pandas-groupby python-polars
我正在绞尽脑汁地试图弄清楚如何在Python的极坐标库中使用groupbyand 。apply
来自 Pandas,我使用的是:
def get_score(df):
return spearmanr(df["prediction"], df["target"]).correlation
correlations = df.groupby("era").apply(get_score)
Run Code Online (Sandbox Code Playgroud)
但在极地,这不起作用。
我尝试了几种方法,主要是:
correlations = df.groupby("era").apply(get_score)
Run Code Online (Sandbox Code Playgroud)
但这失败并出现错误消息:
'可以获取 DataFrame 属性'_df'。确保返回 DataFrame 对象。: PyErr { type: <class 'AttributeError'>, value: AttributeError("'numpy.float64' object has no attribute '_df'"),
有任何想法吗?
rit*_*e46 24
您polars>=0.10.4可以使用该pl.spearman_rank_corr功能。
如果你想使用自定义函数,你可以这样做:
\nimport polars as pl\nfrom typing import List\nfrom scipy import stats\n\ndf = pl.DataFrame({\n "g": [1, 1, 1, 2, 2, 2, 5],\n "a": [2, 4, 5, 190, 1, 4, 1],\n "b": [1, 3, 2, 1, 43, 3, 1]\n})\n\ndef get_score(args: List[pl.Series]) -> pl.Series:\n return pl.Series([stats.spearmanr(args[0], args[1]).correlation], dtype=pl.Float64)\n\n(df.group_by("g", maintain_order=True)\n .agg(\n pl.apply(\n exprs=["a", "b"], \n function=get_score).alias("corr")\n ))\nRun Code Online (Sandbox Code Playgroud)\n(df.group_by("g", maintain_order=True)\n .agg(\n pl.spearman_rank_corr("a", "b").alias("corr")\n ))\nRun Code Online (Sandbox Code Playgroud)\n两者输出:
\nshape: (3, 2)\n\xe2\x94\x8c\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\x90\n\xe2\x94\x82 g \xe2\x94\x86 corr \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x86 f64 \xe2\x94\x82\n\xe2\x95\x9e\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\xa1\n\xe2\x94\x82 1 \xe2\x94\x86 0.5 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 2 \xe2\x94\x86 -1e0 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 5 \xe2\x94\x86 NaN \xe2\x94\x82\n\xe2\x94\x94\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\x98\nRun Code Online (Sandbox Code Playgroud)\n.apply我们还可以通过或在单个表达式上应用自定义函数.map。
下面的示例说明了如何使用自定义函数和普通极坐标表达式对列求平方。表达式语法应该始终是首选,因为它要快得多。
\nshape: (3, 2)\n\xe2\x94\x8c\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\x90\n\xe2\x94\x82 g \xe2\x94\x86 corr \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x86 f64 \xe2\x94\x82\n\xe2\x95\x9e\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\xa1\n\xe2\x94\x82 1 \xe2\x94\x86 0.5 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 2 \xe2\x94\x86 -1e0 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 5 \xe2\x94\x86 NaN \xe2\x94\x82\n\xe2\x94\x94\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\x98\nRun Code Online (Sandbox Code Playgroud)\napply和 和有什么区别map?map适用于整个列series。apply适用于单个值或单个组,具体取决于上下文。
select语境:map\nSeriesapply\nUnion[int, float, str, bool]group_by语境:map\nSeriesapply\nSeries| 归档时间: |
|
| 查看次数: |
14486 次 |
| 最近记录: |