我想使用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,如果有10个age_group,则为12,将显示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:age_group 10中的10、20、30、40、50、60:仅存在shop_id 12,但没有shop_id1。因此,我需要有一个新记录来显示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
** are the new added rows
我如何实现这种转变?
我如何实现这种转变?
首先,您不必。如果使用得当,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_member
每个age group
分割的累计量shop_id
吗?
您可能想知道为什么蓝色条shop_id1
没有显示。但这仅仅是因为数字的大小差异如此之大。如果您将的小分子替换count_of_member
为shop_id=1
与的可比性更小shop_id=12
,则会得到以下替代:
以下是完整的代码段,其中已注释掉更改后的数据集。使用的数据集仍然与第三个数据样本中的数据集相同。
完整的代码:
# 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]
仅使用和标记它,并专注于问题的数据转换部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句