我需要根据特定列中的列表向数据框添加新列。新列需要是从列中的所有列表派生的集合。
然后我有另一列,列表对应第一列,但数据略有不同。如果值不在"不包括"我需要这些值来填充新列。列表
以下是一个例子:
Disease Status
0 Asthma|ARD Ph II|Ph I
1 Arthritis|Inflammation|Asthma Ph III|Approved|No development reported
这应该成为:
Disease Status Asthma ARD Arthritis Inflammation
0 Asthma|ARD Ph II|Ph I Ph II Ph I
1 Arthritis|Inflammation|Asthma Ph III|Approved|No development Ph III Approved
这里的"列表不包括"只是['没有开发']但是我想在这里包含更多的术语。
我正在使用的数据框有很多列,我有兴趣开发一个函数,我可以简单地传递df,列名和一个"不要包含"将以有效的方式执行此任务的列表(理想情况下,没有任何或非常少的循环)。
我目前的方法是从疾病列创建一个集合,通过pd.concat将其添加到数据框,然后遍历每一行,拆分两列中的值,然后循环遍历"疾病& #34;列表以在疾病列中输入正确的状态。
这个问题是我的数据帧大约是12k行,这变得非常耗费时间。
答案 0 :(得分:2)
您似乎在每个单独的单元格中都有多个值(来自您之前和当前的问题)。首先整理数据然后继续进行分析会容易得多。尝试将每列中的每个值放在自己的单元格中。
df1 = pd.concat([df[col].str.split('|', expand=True).stack().reset_index(1, drop=True) for col in df.columns], axis=1)
df1
0 1
0 Asthma Ph II
0 ARD Ph I
1 Arthritis Ph III
1 Inflammation Approved
1 Asthma No development reported
然后你可以从这里转动它,只选择你关心的列
cols = ['Asthma', 'ARD']
df2 = df1.reset_index().pivot(index='index',columns=0, values=1)[cols]
df2
0 Asthma ARD
index
0 Ph II Ph I
1 No development reported None
然后将此DataFrame连接到原始
pd.concat((df, df2),axis=1)
Disease Status \
index
0 Asthma|ARD Ph II|Ph I
1 Arthritis|Inflammation|Asthma Ph III|Approved|No development reported
Asthma ARD
index
0 Ph II Ph I
1 No development reported None
答案 1 :(得分:1)