問題
以下のようなデータフレームがあったとします。
属性 | コメント | フラグ |
---|---|---|
患者 | おはようございます。今日もいい天気ですね | 1 |
患者 | はい | 0 |
医師 | かしこまりました。 | 0 |
このデータフレームのコメントの内容を「。」で分割して複数行にしたいです。
最終的には以下のようにしたいと考えています。
属性 | コメント | フラグ |
---|---|---|
患者 | おはようございます。 | 1 |
患者 | 今日もいい天気ですね | 1 |
患者 | はい | 0 |
医師 | かしこまりました。 | 0 |
「おはようございます。今日もいい天気ですね」を「おはようございます。」「今日もいい天気ですね」に分割して2行にしたいです。コメント列以外はすべて同じになっています。
データフレームでこのような動作をうまく行う方法が思いつかなかったので教えていただきたいです。
データフレームは以下で作成可能です。
import pandas as pd zoku = ["患者", "患者", "医師"] comment = ["おはようございます。今日もいい天気ですね", "はい", "かしこまりました。"] flag = [1, 0, 0] df = pd.DataFrame({'属性':zoku, 'コメント':comment, 'フラグ':flag})
追記
説明足らずで申し訳ございません。
データフレームは用意されていると仮定していますので、データフレーム作成に利用したリストはないものと考えていただければと思います。(df['コメント'].tolist()などで一応可能ですが、もうすこしスマートな方法があれば知りたいです)
また、「おはようございます。今日もいい天気ですね。どこに行きますか」などは2行ではなく3行になる想定です。
属性 | コメント | フラグ |
---|---|---|
患者 | おはようございます。 | 1 |
患者 | 今日もいい天気ですね | 1 |
患者 | どこに行きますか | 1 |
患者 | はい | 0 |
医師 | かしこまりました。 | 0 |
すでに多くの回答を頂きまして、ありがとうございます。説明不足でしたので追記させていただきました。
私が試したのは以下になります。もっとスマートなものがあれば教えていただきたいです。
import pandas as pd zoku = ["患者", "患者", "医師", "患者"] comment = ["おはようございます。今日もいい天気ですね", "はい", "かしこまりました。", "いいえ。そうではないです。"] flag = [1, 0, 0, 0] df = pd.DataFrame({'属性':zoku, 'コメント':comment, 'フラグ':flag}) def split_comment(df, index, index_list, comment_list): # 日本語の文章では|は利用されないと想定して区切り文字にする for comment in df["コメント"].replace('。','。|').split('|'): if comment != '': index_list.append(index) comment_list.append(comment) index_list = [] comment_list = [] df.apply(lambda x: split_comment(x, x.name, index_list, comment_list), axis=1) comment_df = pd.DataFrame({'コメント':comment_list}, index=index_list)
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/02 02:22
2021/07/02 07:40