gpt4 book ai didi

python - 通过 pyspark 转换在 pandas 数据帧上实现 Plotly

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:25 25 4
gpt4 key购买 nike

我想使用 pandas 数据框生成绘图。我在这个话题上很挣扎。

现在,我有这个:

           AGE_GROUP                       shop_id         count_of_member
0 10 1 40
1 10 12 57615
2 20 1 186
4 30 1 175
5 30 12 322458
6 40 1 171
7 40 12 313758
8 50 1 158
10 60 1 168

有些商店可能没有记录。例如,plotly 需要 x=[1,2,3]、y=[4,5,6]。如果我的输入是 x=[1,2,3]y=[4,5],则 x 和 y 的大小不同,并且会出现异常上调。我需要为缺失的 shop_id 添加空值记录。所以,我需要这个:

           AGE_GROUP                       shop_id         count_of_member
0 10 1 40
1 10 12 57615
2 20 1 186
3 20 12 0
4 30 1 175
5 30 12 322458
6 40 1 171
7 40 12 313758
8 50 1 158
9 50 12 0
10 60 1 168
11 60 12 0

对于每个age_group,我需要有2个shop_id,因为唯一的shop_id集是1和12如果有 10 个age_group,则将显示 20 行。例如:

           AGE_GROUP                       shop_id         count_of_member
1 10 12 57615
2 20 1 186
3 30 1 175
4 40 1 171
5 40 12 313758
6 50 1 158
7 60 1 168

有2个唯一的shop_id:1和12以及6个不同的age_group:10,20,30,40,50,60在age_group 10中:仅存在shop_id 12,但不存在shop_id 1。所以,我需要有一条新记录来显示shop_id 1的age_group 10的count_of_member为0。我最终得到的数据框应该是:

           AGE_GROUP                       shop_id         count_of_member
1 10 12 57615
**1 10 1 0**
2 20 1 186
**2 20 12 0**
3 30 1 175
**3 30 12 0**
4 40 1 171
5 40 12 313758
6 50 1 158
**6 50 12 0**
7 60 12 0
7 60 1 168

** 是新添加的行

我如何实现这种转变?

最佳答案

How can i implement this transformation?

首先,您不必。如果使用正确,plotly 拥有多种方法,您可以在数据集与第三个示例中的数据类似时可视化数据集:

           AGE_GROUP                       shop_id         count_of_member
1 10 12 57615
2 20 1 186
3 30 1 175
4 40 1 171
5 40 12 313758
6 50 1 158
7 60 1 168

不需要应用 pandas 来获取第四个示例的结构。您不清楚要如何处理此示例,但我怀疑您想显示每个年龄组的累积count_of_member除以shop_id像这样吗?

enter image description here

您可能想知道为什么 shop_id1 的蓝色条没有显示。但这只是因为数字的大小差异巨大。如果将 shop_id=1 的微小 count_of_member 替换为与 shop_id=12 更相似的内容,您将得到以下结果:

enter image description here

下面是完整的代码片段,其中更改的数据集已被注释掉。使用的数据集仍然与第三个数据样本中的相同。

完整代码:

# imports
import plotly.graph_objects as go
import pandas as pd

data = {'AGE_GROUP': {0: 10, 1: 10, 2: 20, 4: 30, 5: 30, 6: 40, 7: 40, 8: 50, 10: 60},
'shop_id': {0: 1, 1: 12, 2: 1, 4: 1, 5: 12, 6: 1, 7: 12, 8: 1, 10: 1},
'count_of_member': {0: 40,
1: 57615,
2: 186,
4: 175,
5: 322458,
6: 171,
7: 313758,
8: 158,
10: 168}}

## Optional dataset
# data = {'AGE_GROUP': {0: 10, 1: 10, 2: 20, 4: 30, 5: 30, 6: 40, 7: 40, 8: 50, 10: 60},
# 'shop_id': {0: 1, 1: 12, 2: 1, 4: 1, 5: 12, 6: 1, 7: 12, 8: 1, 10: 1},
# 'count_of_member': {0: 40,
# 1: 57615,
# 2: 186000,
# 4: 175000,
# 5: 322458,
# 6: 171000,
# 7: 313758,
# 8: 158000,
# 10: 168000}}

# # Create DataFrame
df = pd.DataFrame(data)

# Manage shop_id
shops = df['shop_id'].unique()

# set up plotly figure
fig = go.Figure()

# add one trace per NAR type and show counts per hospital
for shop in shops:

# subset dataframe by shop_id
df_ply=df[df['shop_id']==shop]

# add trace
fig.add_trace(go.Bar(x=df_ply['AGE_GROUP'], y=df_ply['count_of_member'], name='shop_id'+str(shop)))

fig.show()

编辑:

如果您出于某种原因仍然需要像第四个示例中那样构造数据,我建议您提出另一个问题并专门用 [pandas][python]< 标记它 ,并且专门关注问题的数据转换部分。

关于python - 通过 pyspark 转换在 pandas 数据帧上实现 Plotly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com