Автоматическое добавление трассировок на основе фрейма данных

#python #plotly #data-science

Вопрос:

Я пытаюсь использовать точечный разброс, чтобы сделать ежемесячный баланс каждой ветви. Ниже приведен мой код:

 import pandas as pd
import numpy as np
from pandas import ExcelWriter
import plotly.graph_objects as go
import plotly.express as px

df1 = pd.DataFrame({
    'BAS_DT': ['202101','202102','202103','202104','202105','202106',
               '202101','202102','202103','202104','202105','202106',
               '202101','202102','202103','202104','202105','202106'],
    'BR_CD': ['001','001','001','001','001','001',
              '100','100','100','100','100','100',
              '101','101','101','101','101','101'],
    'BAL':[1100,1150,950,1020,999,1025,
           1200,1050,950,1000,950,1075,
           1080,1115,990,898,915,1100]})

df1 = df1.pivot_table(index='BAS_DT', columns='BR_CD', values='BAL').reset_index()
df1.head()

# df1
BR_CD   BAS_DT  001 100 101
0   202101  1100    1200    1200
1   202102  1150    1050    1050
2   202103  950 950 950
3   202104  1020    1000    1000
4   202105  999 950 950
5   202106  1025    1025    1025

fig=go.Figure()
fig.add_trace(go.Scatter(
    x=df1['BAS_DT'],
    y=df1['001'],
    name="001",
    text=df1['001'],
    mode='lines markers text',
    textposition='top center',
    line_shape='spline'))

fig.add_trace(go.Scatter(
    x=df1['BAS_DT'],
    y=df1['100'],
    name="100",
    text=df1['100'],
    mode='lines markers text',
    textposition='top center',
    line_shape='spline'))

fig.add_trace(go.Scatter(
    x=df1['BAS_DT'],
    y=df1['101'],
    name="101",
    text=df1['101'],
    mode='lines markers text',
    textposition='top center',
    line_shape='spline'))

fig.show()
 

На рис показано, как показано ниже:
введите описание изображения здесь

Но моя проблема в том, что мне придется добавлять новые трассировки вручную, если появятся новые ветви. Я хочу спросить, есть ли способ автоматически добавлять новые трассировки на основе входного кадра данных?

Спасибо и с наилучшими пожеланиями.

Ответ №1:

Итеративно добавьте трассировки, пройдя по столбцам, которые вы хотите использовать в df1. В этом примере вам нужны все столбцы, которые идут после индекса столбца 0 (BAS_DT) или df1.columns[1:]

 fig=go.Figure()

for col in df1.columns[1:]:
    fig.add_trace(go.Scatter(
        x=df1['BAS_DT'],
        y=df1[col],
        name=col,
        text=df1[col],
        mode='lines markers text',
        textposition='top center',
        line_shape='spline'))

fig.show()
 

введите описание изображения здесь

Комментарии:

1. Спасибо, это сработало. Очень признателен.

2. @hoatran нет, проблем и удачи в вашем проекте.