【问题标题】:Making few columns into one column if certain conditions are fulfilled如果满足某些条件,则将几列合并为一列
【发布时间】:2021-12-02 12:11:58
【问题描述】:

我有一个练习,如果三列中的数据相同,我需要将几行或几行转换为一行。

substances = pd.DataFrame({'id': ['id_1', 'id_1', 'id_1', 'id_2', 'id_3'],
     'part': ['1', '1', '2', '2', '3'],
     'sub': ['paracetamolum', 'paracetamolum', 'ibuprofenum', 'dienogestum', 'etynyloestradiol'],
     'strength': ['150', '50', '50', '20', '30'],
     'unit' : ['mg', 'mg', 'mg', 'mg', 'mcg'],
     'other irrelevant columns for this task' : ['sth1' , 'sth2', 'sth3', 'sth4', 'sth5']
      })

现在只要id、part、substance都一样,我要把它排成一行,所以最终的结果是:

id part strength substance unit
id_1 1 '150 # 50' paracetamolum mg
id_1 2 50 ibuprofenum mg
id_2 2 20 dienogestum mg
id_3 3 30 etynyloestradiol mcg

我遇到的问题是,我无法将这些行合并为一行以显示可能的强度,例如 '150 # 50' 我尝试过这样的事情,但效果不佳:

substances = substances.groupby('id', 'part', 'sub', 'strength').id.apply(lambda x: str(substances['strength']) + ' # ' + str(next(substances['strength'])))

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:
    df = df.groupby(['id','part','sub','unit']).agg({'strength':' # '.join}).reset_index()
    df = df[['id','part','strength', 'sub','unit']]
    print(df)
    

    输出:

         id part  strength               sub unit
    0  id_1    1  150 # 50     paracetamolum   mg
    1  id_1    2        50       ibuprofenum   mg
    2  id_2    2        20       dienogestum   mg
    3  id_3    3        30  etynyloestradiol  mcg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      相关资源
      最近更新 更多