【问题标题】:Elegant way to check multiple if conditions in Dictionary在字典中检查多个 if 条件的优雅方法
【发布时间】:2019-12-12 19:37:01
【问题描述】:

我有一个如下所示的数据框字典

dataFramesDict[sheet_name] = pd.DataFrame({'Date':['2007-05-30','2107-11-30','2207-05-20','2307-05-20'],'Value': [2.4,2.5,2.6,2.7],'Test': ['Height','Weight','SBP','DBP']})

我想做的是创建一个名为Unit 的新列并基于Test 列添加值

这是我尝试过的,但这看起来并不优雅或高效。

if dataFramesDict[sheet_name]['Test'] == 'Height':
    dataFramesDict[sheet_name]['unit'] == 'm'
if dataFramesDict[sheet_name]['Test'] == 'Weight':
    dataFramesDict[sheet_name]['unit'] == 'kg'
if dataFramesDict[sheet_name]['Test'] == 'SBP':
    dataFramesDict[sheet_name]['unit'] == 'millimeter'
if dataFramesDict[sheet_name]['Test'] == 'DBP':
    dataFramesDict[sheet_name]['unit'] == 'millimeter'

请注意,sheet_name 是 Excel 工作表的一部分。我总共有 10 多张纸,我想阅读每张纸并检查每张纸中的测试值并根据Test 列分配单位值

我希望我的输出如下所示

【问题讨论】:

    标签: python python-3.x pandas dataframe dictionary


    【解决方案1】:

    mapdict 一起使用

    例如:

    d = {'Height':"m",'Weight': "kg",'SBP':'mm','DBP':'mm'}
    dataFramesDict = pd.DataFrame({'Date':['2007-05-30','2107-11-30','2207-05-20','2307-05-20'],'Value': [2.4,2.5,2.6,2.7],'Test': ['Height','Weight','SBP','DBP']})
    dataFramesDict["Unit"] = dataFramesDict["Test"].map(d)
    print(dataFramesDict)
    

    输出:

             Date    Test  Value Unit
    0  2007-05-30  Height    2.4    m
    1  2107-11-30  Weight    2.5   kg
    2  2207-05-20     SBP    2.6   mm
    3  2307-05-20     DBP    2.7   mm
    

    【讨论】:

    • 有没有办法用文件做这个?例如,我有一个包含所有单元和相应测试的 csv 文件。那么我们如何映射呢?
    • @SSMK 是的,您需要先将这些映射转换为 python 字典对象
    • 你能帮我写这篇文章吗? stackoverflow.com/questions/57667919/…
    【解决方案2】:

    使用 Pandas 替换

    df['unit'] = df.Test.replace({'Height':"m",'Weight': "kg",'SBP':'mm','DBP':'mm'})
    

    【讨论】:

    • 你能帮我写这篇文章吗? stackoverflow.com/questions/57667919/…
    • @SSMK 你为什么要删除帖子。我正在研究解决方案。
    • 我创建了另一篇简短易读的帖子。你评论它很冗长。所以,我把这个问题分成两部分。这是第 1 部分 stackoverflow.com/questions/57669326/…
    • 很快就会分享第二部分的链接。你可以提供你的答案,我会回复的。希望没关系。感谢您对我的旧问题的评论
    【解决方案3】:

    请尝试以下代码。希望对你有帮助:

    unitDict = {'Height':'m', 'Weight': 'Kg', 'SBP':'millimeter', 'DBP':'millimeter'}
    
    
    def checkUnit(data):
      if unitDict[data] is not None:
        return unitDict[data]
    
    df['Unit']=list(map(checkUnit, df['Test']))
    
    print(df)
    

    【讨论】:

    猜你喜欢
    • 2017-11-27
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多