polars

with_columns


def udf_concurrency():
    def udf2(a: int) -> str:
        time.sleep(1)
        return f"{a}_{a}"

    def udf_batch(series) -> str:
        print("xx" * 100, len(series))
        res = []
        for a in series:
            time.sleep(1)
            res.append(f"{a}_{a}")
        return pl.Series(res)

    conn.create_function("udf2", udf2,
                         null_handling="special", exception_handling="return_null")
    a = [{"a": 1, "b": 1, "c": 'c1', "d": 'd1'},
         {"a": 1, "b": 1, "c": 'c2', "d": 'd2'},
         {"a": 2, "b": 2, "c": 'c3', "d": 'd3'},
         {"a": 2, "b": 2, "c": 'c4', "d": 'd4'},
         {"a": 3, "b": 3, "c": 'c5', "d": 'd5'}]

    df = pl.from_dicts(a)
    start = time.time()
    conn.execute("PRAGMA threads=4;")
    conn.sql("select a,udf2(b) from df").show()
    print(f"{time.time() - start}")
    start = time.time()
    for i in a:
        udf2(i)
    print(f"{time.time() - start}")
    start = time.time()
    df2 = df.with_columns(
        pl.col("b").map_elements(udf2).alias("bb")
    )
    print(df2.head())
    print(f"{time.time() - start}")
    start = time.time()
    df2 = df.with_columns(
        pl.col("b").map_batches(udf_batch).alias("bb")
    )
    print(df2.head())
    print(f"{time.time() - start}")

窗口函数

In [67]: df.select(pl.col('names','id','distance').sort_by("distance", descendin
    ...: g=False).over('id'))
Out[67]: 
shape: (5, 3)
┌───────┬─────┬──────────┐
│ names ┆ id  ┆ distance │
│ ---   ┆ --- ┆ ---      │
│ str   ┆ str ┆ f64      │
╞═══════╪═════╪══════════╡
│ ham   ┆ A   ┆ 0.074971 │
│ foo   ┆ A   ┆ 0.664746 │
│ cc    ┆ B   ┆ 0.151077 │
│ egg   ┆ C   ┆ 0.355057 │
│ spam  ┆ B   ┆ 0.308573 │
└───────┴─────┴──────────┘

with_columns 保存原有列

In [167]: out = filtered.with_columns(
     ...:     pl.col(["Name", "Speed"]).sort_by("Speed", descending=False).over(
     ...: "Type 1",
     ...:    mapping_strategy = 'group_to_rows'),
     ...:    pl.col('Name').cumcount().sort_by("Speed", descending=False).over("
     ...: Type 1",   mapping_strategy = 'group_to_rows')
     ...: .alias('rn')).sort('Type 1',descending=False)
     ...: print(out)
shape: (7, 4)
┌─────────────────────┬────────┬───────┬─────┐
│ Name                ┆ Type 1 ┆ Speed ┆ rn  │
│ ---                 ┆ ---    ┆ ---   ┆ --- │
│ str                 ┆ str    ┆ i64   ┆ u32 │
╞═════════════════════╪════════╪═══════╪═════╡
│ Exeggcute           ┆ Grass  ┆ 40    ┆ 0   │
│ Exeggutor           ┆ Grass  ┆ 55    ┆ 1   │
│ Jynx                ┆ Ice    ┆ 95    ┆ 0   │
│ Slowpoke            ┆ Water  ┆ 15    ┆ 0   │
│ Slowbro             ┆ Water  ┆ 30    ┆ 1   │
│ SlowbroMega Slowbro ┆ Water  ┆ 30    ┆ 2   │
│ Starmie             ┆ Water  ┆ 115   ┆ 3   │
└─────────────────────┴────────┴───────┴─────┘

select

In [199]: out = filtered.select(
     ...:     pl.col(["Name",'Type 1','Speed']).sort_by("Speed", descending=True
     ...: ).over("Type 1",
     ...:    mapping_strategy = 'group_to_rows'),
     ...:    pl.col('Name').cumcount().sort_by("Speed", descending=False).over("
     ...: Type 1",   mapping_strategy = 'group_to_rows')
     ...: .alias('rn')).sort('Type 1',descending=False)
     ...: print(out)
shape: (7, 4)
┌─────────────────────┬────────┬───────┬─────┐
│ Name                ┆ Type 1 ┆ Speed ┆ rn  │
│ ---                 ┆ ---    ┆ ---   ┆ --- │
│ str                 ┆ str    ┆ i64   ┆ u32 │
╞═════════════════════╪════════╪═══════╪═════╡
│ Exeggutor           ┆ Grass  ┆ 55    ┆ 0   │
│ Exeggcute           ┆ Grass  ┆ 40    ┆ 1   │
│ Jynx                ┆ Ice    ┆ 95    ┆ 0   │
│ Starmie             ┆ Water  ┆ 115   ┆ 0   │
│ Slowbro             ┆ Water  ┆ 30    ┆ 1   │
│ SlowbroMega Slowbro ┆ Water  ┆ 30    ┆ 2   │
│ Slowpoke            ┆ Water  ┆ 15    ┆ 3   │
└─────────────────────┴────────┴───────┴─────┘

groupby

In [84]: df.groupby('id').agg(pl.col('names').sort_by('distance',descending=Fals
    ...: e),pl.col('distance').sort_by('distance',descending=False))
Out[84]: 
shape: (3, 3)
┌─────┬────────────────┬──────────────────────┐
│ id  ┆ names          ┆ distance             │
│ --- ┆ ---            ┆ ---                  │
│ str ┆ list[str]      ┆ list[f64]            │
╞═════╪════════════════╪══════════════════════╡
│ B   ┆ ["cc", "spam"] ┆ [0.151077, 0.308573] │
│ C   ┆ ["egg"]        ┆ [0.355057]           │
│ A   ┆ ["ham", "foo"] ┆ [0.074971, 0.664746] │
└─────┴────────────────┴──────────────────────┘
In [77]:  df.sort("distance",descending=False).groupby("id").agg(pl.col('names')
    ...: ,pl.col('distance'))
Out[77]: 
shape: (3, 3)
┌─────┬────────────────┬──────────────────────┐
│ id  ┆ names          ┆ distance             │
│ --- ┆ ---            ┆ ---                  │
│ str ┆ list[str]      ┆ list[f64]            │
╞═════╪════════════════╪══════════════════════╡
│ B   ┆ ["cc", "spam"] ┆ [0.151077, 0.308573] │
│ A   ┆ ["ham", "foo"] ┆ [0.074971, 0.664746] │
│ C   ┆ ["egg"]        ┆ [0.355057]           │
└─────┴────────────────┴──────────────────────┘
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容