teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

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

2021/06/30 10:04

投稿

toshikawa
toshikawa

スコア388

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