作为一个最小的例子,假设我们有next polars. DataFrame:

df = pl.DataFrame({"sub_id": [1,2,3], "engagement": ["one:one,two:two", "one:two,two:one", "one:one"], "total_duration": [123, 456, 789]})

sub_id engagement total_duration
1 one:one,two:two 123
2 one:two,two:one 456
3 one:one 789

然后我们就炸开"订婚"栏

df = df.with_columns(pl.col("engagement").str.split(",")).explode("engagement")

并收到:

sub_id engagement total_duration
1 one:one 123
1 two:two 123
2 one:two 456
2 two:one 456
3 one:one 789

对于可视化,我使用Plotly,代码如下:

import plotly.express as px
fig = px.bar(df, x="sub_id", y="total_duration", color="engagement")
fig.show()

由此产生的情节:

Resulting plot

现在,这基本上意味着用户1和2的total_duration(总观看时间)增加了一倍. 我如何保持total_duration per sub,但保留参与组如情节图例所示?

推荐答案

在两极中处理这个问题的一个选项是在sub_id内的接合行之间平均分割total_duration.为此,我们简单地将total_duration除以给定的sub_id的行数.

(
    df
    .with_columns(
        pl.col("engagement").str.split(",")
    )
    .explode("engagement")
    .with_columns(
        pl.col("total_duration") / pl.len().over("sub_id")
    )
)

shape: (5, 3)
┌────────┬────────────┬────────────────┐
│ sub_id ┆ engagement ┆ total_duration │
│ ---    ┆ ---        ┆ ---            │
│ i64    ┆ str        ┆ f64            │
╞════════╪════════════╪════════════════╡
│ 1      ┆ one:one    ┆ 61.5           │
│ 1      ┆ two:two    ┆ 61.5           │
│ 2      ┆ one:two    ┆ 228.0          │
│ 2      ┆ two:one    ┆ 228.0          │
│ 3      ┆ one:one    ┆ 789.0          │
└────────┴────────────┴────────────────┘

Python相关问答推荐

Pydantic 2.7.0模型接受字符串日期时间或无

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

删除最后一个pip安装的包

如何获取numpy数组的特定索引值?

如果值发生变化,则列上的极性累积和

改进大型数据集的框架性能

未知依赖项pin—1阻止conda安装""

删除marplotlib条形图上的底边

如何在Python中获取`Genericums`超级类型?

Python Tkinter为特定样式调整所有ttkbootstrap或ttk Button填充的大小,适用于所有主题

并行编程:同步进程

mdates定位器在图表中显示不存在的时间间隔

需要帮助使用Python中的Google的People API更新联系人的多个字段'

在matplotlib中重叠极 map 以创建径向龙卷风图

通过对列的其余部分进行采样,在Polars DataFrame中填充_null`?

极点:在固定点扩展窗口

Pandas:使列中的列表大小与另一列中的列表大小相同

更新包含整数范围的列表中的第一个元素

pyspark where子句可以在不存在的列上工作