-1

我有以下输入:

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 号(包括)。

第二个序列是从 No.6 到“D”的下一个 Value,No.10。等等。

Dataframe 中有六个序列。

如何可视化序列?

4

2 回答 2

1

序列的可视化可以被认为是(现有序列的数量及其间隔)。如果上述情况成立。

您可以尝试:

在名为 seq 的新列中将 D 值替换为“nan”

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

然后绘制 df 以将序列可视化为:

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

o/p 将如下所示:

在此处输入图像描述

如果 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')

在此处输入图像描述

于 2020-01-14T10:54:04.220 回答
1

我认为你需要:

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()
于 2020-01-14T09:53:31.513 回答