pyspark变换在pandas数据帧上的Plotly实现

2024-05-03 05:41:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用熊猫数据帧生成绘图。我在这个话题上苦苦挣扎

现在,我有这个:

           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

对于每个年龄组,我需要有2个店铺id,因为唯一的店铺id集是1和12 如果有10个年龄组,将显示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个独特的店铺id:1和12,6个不同年龄组:10,20,30,40,50,60 在年龄组10中:仅存在店铺id 12,但没有店铺id 1。 因此,我需要有一个新记录来显示店铺id 1的10岁组成员的计数为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

** are the new added rows

我如何实现这个转换


Tags: of数据id绘图agecount记录group
1条回答
网友
1楼 · 发布于 2024-05-03 05:41:03

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

不需要应用熊猫来获得第四个样本的结构。你不清楚你想用这个样本做什么,但我怀疑你想显示累积的count_of_memberage group除以shop_id像这样

enter image description here

你可能想知道为什么shop_id1的蓝色条没有显示出来。但这仅仅是因为数字的大小差别太大了。如果您将shop_id=1count_of_member替换为shop_id=12shop_id=12count_of_member小部分,您将得到以下结果:

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]标记它,只关注问题的数据转换部分

相关问题 更多 >