在pandas和python中的特殊条件下将dataframe中的数据转换为列表

在pandas和python中的特殊条件下将dataframe中的数据转换为列表,python,pandas,Python,Pandas,以下是数据帧的子集。 我想创建4个列表: 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

以下是数据帧的子集。 我想创建4个列表:

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]
如您所见,如果WD列中的值不是NAN,我将捕获该值的注释id和药物id

我知道我可以使用以下代码迭代行以捕获每个WD:

for index, row in df.iterrows()
但是如果不是NAN,我不知道怎么说
而且,当我将捕获的值添加到已经定义的列表中时,该列表不会返回列表。列表中的数据为字符串格式

您可以通过
cumcount()
创建一个
rowid
,它对应于
comment\u id
drug\u id
的每个组合中的列索引,然后使用两个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()


数据设置:


更新:

看起来您想要的是相反的,鉴于数据帧
df1
,您可以首先将其转换为长格式,然后每个列都是您需要的,您可以使用
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()

非常感谢。请告诉我如何打印WDs、评论id和药品id?打印(WDs)好吗?你的意思是这些列表在文本文件中吗?不。我不知道你是如何创建这样一个输出的。我用不同的方法更新了。我首先误解了你的问题。我以为你有这些列表,你想创建数据框。在更新中,
df1
将成为您的数据帧
stack()
并提取这些列将为您提供这些列表。非常感谢您抽出时间。
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()