2017-01-26 3 views
1

以下はデータフレームのサブセットです。 WDの列の値がNANでない場合、私はその値のためcomment_idとdrug_idをキャプチャ、見ての通りpandasとpythonの特別な条件の下でデータフレームのデータをリストに変換する

list 1: list of all WD1 as follows: 
[flu-like symptoms, dizziness, major mood swings, lots of anxiety, tiredness, Dizziness, headaches, neck pain, headache, nausea] 
list 2: comment_id: [1, 1, 1, 1, 1, 14, 14, 14, 17, 17] 
list 3 drug_id [lex.1, lex.1, lex.1, lex.1, lex.1, lex14, lex14, lex14, lex18, lex18] 

: 私は4つのリストを作成します。

for index, row in df.iterrows() 

が、私は追加していたとき、私は、 if it is not NAN とも言う方法がわからない:私は、次のコードを使用して各WDをキャプチャするために行を反復処理することができることを知って

enter image description here

取得した値を既に定義したリストに追加すると、リストはリストを返しません。リストのデータは文字列形式です。

答えて

2

あなたはcumcount()によってcomment_iddrug_idの各組み合わせ内の列のインデックスに対応rowidを作成し、指標として2つのID列とそれをアンスタックすることができる:

df1 = (df.assign(rowid = df.groupby(["comment_id", "drug_id"]).cumcount() + 1) 
     .set_index(["comment_id", "drug_id", "rowid"]) 
     .rename_axis(("comment_id", "drug_id","")).unstack(level=2)) 

# rename columns from multi-index to single index 
df1.columns = [''.join(map(str, col)) for col in df1.columns] 
df1.reset_index() 

enter image description here


データ設定

WDs = ["flu-like symptoms", "dizziness", "major mood swings", "lots of anxiety", "tiredness", "Dizziness", "headaches", "neck pain", "headache", "nausea"] 
comment_id = [1, 1, 1, 1, 1, 14, 14, 14, 17, 17] 
drug_id = ["lex.1", "lex.1", "lex.1", "lex.1", "lex.1", "lex14", "lex14", "lex14", "lex18", "lex18"] 

df = pd.DataFrame({"WD": WDs, "comment_id": comment_id, "drug_id": drug_id}) 

更新:あなたは逆に、データフレームdf1与え、あなたはまず長い形式に変換することができますし、各列は、あなたが、あなたができる必要がある1つになりたいよう

が見えますそれらを変換するにはtolist()を使用してください:

df2 = df1.set_index(["comment_id", "drug_id"]).stack().rename("WD").reset_index() 
comment_id, drug_id, WD = df2.comment_id.tolist(), df2.drug_id.tolist(), df2.WD.tolist() 
+0

ありがとうございます。 WDs、comment_id、drug_idの印刷方法を教えてください。 – Mary

+0

print(WDs)?これらのリストがテキストファイルにあることを意味しますか? – Psidom

+0

いいえあなたはそのような出力をどのように作成したのか分かりません。 – Mary

関連する問題