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