回答編集履歴

1

2行以上も対応できるように変更

2021/06/30 10:04

投稿

toshikawa
toshikawa

スコア388

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  zoku = ["患者", "患者", "医師"]
6
6
 
7
- comment = ["おはようございます。今日もいい天気ですね", "はい", "かしこまりました。"]
7
+ comment = ["おはようございます。今日もいい天気ですね。よろしくお願いします。", "はい", "かしこまりました。"]
8
8
 
9
9
  flag = [1, 0, 0]
10
10
 
@@ -12,25 +12,35 @@
12
12
 
13
13
 
14
14
 
15
- # 。がある場合複製
15
+ # コメントを「」でリスト分割。リストの長さを変数に代入
16
16
 
17
17
  df['コメント']=df['コメント'].str.replace('。','。 ').str.split()
18
18
 
19
- df_a=df[df['コメント'].apply(lambda x: len(x) > 1)]
19
+ df['m']=df['コメント'].apply(lambda x: len(x))
20
-
21
- df_a
22
-
23
- df = pd.concat([df,df_a]).sort_index().reset_index(drop=True)
24
20
 
25
21
 
26
22
 
27
- # 複製した行にフラグを作成して、コメント抽出
23
+ # コメントのリストの長さで複製
28
24
 
29
- df['id'] = (df==df.shift(1)).all(axis=1)
25
+ df = pd.DataFrame(np.repeat(df.reset_index().values,df.m,axis=0),columns=['インデックス','属性','コメント','フラグ','カウント'])
30
26
 
31
- df['コメント']=df.apply(lambda x: x['コメント'][x['id']],axis=1)
32
27
 
28
+
29
+ # リストからの取り出しインデックスを作成
30
+
31
+ df['カウント']=df.groupby('インデックス').expanding().count()['コメント'] .values.astype('int') - 1
32
+
33
+
34
+
35
+ # コメント抽出
36
+
37
+ df['コメント']=df.apply(lambda x: x['コメント'][x['カウント']],axis=1)
38
+
39
+
40
+
41
+ # 不要な列を削除
42
+
33
- df.drop('id',axis=1,inplace=True)
43
+ df.drop(['インデックス','カウント'],inplace=True,axis=1)
34
44
 
35
45
 
36
46
 
@@ -44,11 +54,13 @@
44
54
 
45
55
  0 患者 おはようございます。 1
46
56
 
47
- 1 患者 今日もいい天気ですね 1
57
+ 1 患者 今日もいい天気ですね 1
48
58
 
49
- 2 患者 0
59
+ 2 患者 よろしくお願します。 1
50
60
 
61
+ 3 患者 はい 0
62
+
51
- 3 医師 かしこまりました。 0
63
+ 4 医師 かしこまりました。 0
52
64
 
53
65
  """
54
66
 
@@ -56,4 +68,4 @@
56
68
 
57
69
 
58
70
 
59
- いかがでしょうか?
71
+ いかがでしょうか?  2行以上も対応してみました。