Как визуализировать последовательность данных из DataFrame - PullRequest
0 голосов
/ 14 января 2020

У меня есть следующий ввод:

import pandas as pd
df = pd.DataFrame(np.array([[1,  "A"],[2, "A"],[3, "B"],[4, "C"],[5, "D" ],[6, "A" ],[7, "B" ],[8, "A"], 
                           [9, "C" ],[10, "D" ],[11,"A" ],
                           [12,  "A"],[13, "B"],[14, "B"],[15, "D" ],[16, "A" ],[17, "B" ],[18, "A" ], 
                           [19, "C" ],[20, "D" ],[21,"A" ],
                           [22,  "A"],[23, "A"],[24, "C"],[25, "D" ],[26, "A" ],[27, "C" ],[28, "A" ], 
                           [29, "C" ],[30, "D" ],[31,"A" ]]),
                            columns=['No.',  'Value'])

Это вывод:

    No. Value
0   1   A
1   2   A
2   3   B
3   4   C
4   5   D
5   6   A
6   7   B
7   8   A
8   9   C
9   10  D
10  11  A
11  12  A
12  13  B
13  14  B
14  15  D
15  16  A
16  17  B
17  18  A
18  19  C
19  20  D
20  21  A
21  22  A
22  23  A
23  24  C
24  25  D
25  26  A
26  27  C
27  28  A
28  29  C
29  30  D
30  31  A

Теперь я хочу визуализировать все последовательности, которые находятся в данных.

Первая последовательность должна начинаться с первого значения во фрейме данных и заканчивается следующим значением "D". Так, например, первая последовательность от № 1 до № 5 (включая).

Вторая последовательность от № 6 до следующего значения «D», № 10. И так далее.

В кадре данных есть шесть последовательностей.

Как визуализировать последовательности?

Ответы [ 2 ]

1 голос
/ 14 января 2020

Визуализация последовательности может рассматриваться как (количество существующих последовательностей и их интервал). Если вышеупомянутое верно.

Вы можете попробовать:

заменить значения D на 'nan' в новом столбце с именем seq

df.loc[df['Value'] != 'D', 'seq'] = 1

Затем построить df для визуализации последовательностей в виде:

import matplotlib.pyplot as plt
plt.plot('seq','ro',data=df)

Значение o / p будет следующим:

enter image description here

, если D также необходимо отобразить. Мы можем попробовать следующий код:

df.loc[df['Value'] != 'D', 'seq'] = 1
df.loc[df['Value'] == 'D', 'seq'] = 2

Затем нарисуйте df для визуализации последовательностей в виде:

import matplotlib.pyplot as plt
plt.plot('seq','rd',data=df,linestyle='dashdot')
plt.plot('seq','gd',data=df,linestyle='dashed')

enter image description here

1 голос
/ 14 января 2020

Я думаю, вам нужно:

g = df['Value'].eq('D').shift().cumsum().bfill().astype(int)
df1 = df.groupby(g)['Value'].value_counts().unstack(fill_value=0)
print (df1)
Value  A  B  C  D
Value            
0      2  1  1  1
1      2  1  1  1
2      2  2  0  1
3      2  1  1  1
4      3  0  1  1
5      2  0  2  1
6      1  0  0  0

df1.plot.bar()

Или:

g = df['Value'].eq('D').shift().cumsum().bfill().astype(int)
idx = df.groupby(g)['Value'].agg(''.join)
df1 = df.groupby(g)['Value'].value_counts().unstack(fill_value=0).set_index(idx)
print (df1)
Value  A  B  C  D
Value            
AABCD  2  1  1  1
ABACD  2  1  1  1
AABBD  2  2  0  1
ABACD  2  1  1  1
AAACD  3  0  1  1
ACACD  2  0  2  1
A      1  0  0  0

df1.plot.bar()
...