如何根据熊猫中另一列行的值合并同一列中的行值

时间:2021-07-08 03:46:44

标签: python pandas dataframe

能否帮助解决这个问题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,则应仅根据条件删除那些

1 个答案:

答案 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
相关问题