【问题标题】:Create a summary variable getting results from multiple variables checking against multiple lists in a dictionary in Pandas/Python在 Pandas/Python 的字典中创建一个汇总变量,从多个变量检查​​多个列表中获取结果
【发布时间】:2018-09-20 20:52:45
【问题描述】:
DXCODE1     DXCODE2     DXCODE3
A1          A2          B2
C2          D3          NaN
B2          C2          A1

DXCODE_DICTIONARY = {'Code_Apple':['A1', 'A2', 'A3', 'A4'],
    'Code_Banana':['B1', 'B2', 'B3'],
    'Code_Cat':['C1', 'C2', 'C3']}

DXCODE1     DXCODE2     DXCODE3         DXCODE_SUMMARY
A1          A2          B2              ['Apple', 'Apple', 'Banana']
C2          D3          NaN             ['Cat']
B2          C2          A1              ['Banana', 'Cat', 'Apple']

以上描述了我试图在 Pandas 中解决的挑战。在 df 中,我有三个 DXCODE 变量。我的最终目标是创建一个 DXCODE_SUMMARY 变量来总结 DXCODE1 到 DXCODE3。对于每一行,我想检查三个变量。例如,对于 DXCODE1,我想对照 DXCODE_DICTIONARY 检查它,如果它在“Code_Apple”列表中,我想用“Apple”标记它(从字典键派生),然后它将对照列表检查'Code_Banana',如果它在列表中,我希望将 'Banana' 添加到 DXCODE_SUMMARY 中的列表中。一旦根据 DXCODE_DICTIONARY 中的所有列表检查了 DXCODE1,将对 DXCODE2 进行相同的检查,然后对 DXCODE3 进行检查。

编辑:在“Code_Apple”列表中添加了“A4”。

【问题讨论】:

    标签: python-3.x pandas iteration multiple-columns scanning


    【解决方案1】:

    尝试修改您的 dict 然后我们将 mapgroupby apply 修改为 list

    dictdf=pd.DataFrame(DXCODE_DICTIONARY).melt()
    newdict=dict(zip(dictdf.value,dictdf.variable))
    
    df.apply(lambda x : x.map(newdict)).stack().groupby(level=0).apply(list)
    Out[1005]: 
    0    [Code_Apple, Code_Apple, Code_Banana]
    1                               [Code_Cat]
    2      [Code_Banana, Code_Cat, Code_Apple]
    dtype: object
    

    【讨论】:

    • 您能否让您的解决方案更具通用性?您的解决方案仅在 DXCODE_DICTIONARY 具有一定数量的行和列时才有效。当我将“代码 Apple”设置为 ['A1', 'A2', 'A3', 'A4'] 时,出现“ValueError: arrays must be all be same length”错误。
    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 2015-09-24
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多