能否帮助解决这个问题enter image description here
在这种情况下,如果第 1 列和第 2 列的行是 None 那么我们需要合并,而第 0 列不应该是 None,我们需要将行与上面的行合并
在这种情况下,第 0 行 0 阿莫西林(三水合物)上限 250 毫克 1 4 好吧,我们不需要对此做任何事情
但是如果我们看到第 5 行 125 mg/5ml None None 在这种情况下 col 0 有一些值但 col1 和 col2 是 None,所以我们需要将 col 0 行值与前一行合并值为 4 行,如果全部为 None,则应仅根据条件删除那些
答案 0 :(得分:0)
假设您的原始数据框是 df
,其中包含如下数据:
0 1 2
0 amoxicillin (trihydrate) cap 250 mg 1 4
1 None None None
2 amoxicillin (trihydrate) cap 500 mg 1 t
3 amoxicillin (trihydrate) for susp 1 h
4 None None None
5 125 mg/5ml None None
6 None None None
7 amoxicillin (trihydrate) for susp None None
8 200 mg/5ml None None
9 None None None
10 amoxicillin (trihydrate) for susp 1 None
11 None None None
12 250 mg/5ml None None
13 amoxicillin (trihydrate) for susp 1 None
14 400 mg/5ml None None
15 amoxicillin (trihydrate) tab 500 mg 1 None
16 amoxicillin (trihydrate) tab 875 mg 1 None
现在我们将用 None
替换 NaN
并删除全部为 Nan
的行:
df = df.replace(to_replace='None', value=np.nan).dropna(how='all')
mask = df.isnull()
final = pd.DataFrame()
i,j = 0,0
for index,row in mask.iterrows():
if row[1] and row[2]:
final.iloc[j-1,0] = final.iloc[j-1,0] + " " + df.iloc[i,0]
else:
final = final.append(df.iloc[i])
j+=1
i+=1
print(final)
我们再创建一个数据框作为 mask
,它包含基于 null 或不为 null 的 bool 值,并迭代数据框的每一行以检查条件并将结果附加到 final
数据框:
#result
0 1 2
0 amoxicillin (trihydrate) cap 250 mg 1 4
2 amoxicillin (trihydrate) cap 500 mg 1 t
3 amoxicillin (trihydrate) for susp 125 mg/5ml ... 1 h
10 amoxicillin (trihydrate) for susp 250 mg/5ml 1 NaN
13 amoxicillin (trihydrate) for susp 400 mg/5ml 1 NaN
15 amoxicillin (trihydrate) tab 500 mg 1 NaN
16 amoxicillin (trihydrate) tab 875 mg 1 NaN