【问题标题】:Using Excel file as mapping for pandas dataframe in Python在 Python 中使用 Excel 文件作为 pandas 数据框的映射
【发布时间】:2021-12-14 18:57:23
【问题描述】:

我正在尝试使用错误代码的 excel“主列表”以及它们所属的较大组,它们属于熊猫数据框中较大组的组错误。我不确定如何做到这一点。我以前尝试将错误代码添加到字典中,并使用组名作为键并按其进行分组,但它不会正确地对代码进行分组。我将在下面添加我的主列表和数据框的示例。

主列表:

CODE Type 1 Type 2 Type 3 Type4
Code A X
Code B X
Code C X
Code D X
Code E X

10 列 57 行以此类推

数据帧:

CODE Numerator Denominator Error Rate
CODE B 6 10 0.6
CODE A 4 10 0.4
CODE C 9 10 0.9
CODE D 0 10 0

无论出现什么错误代码,依此类推

我希望输出是:

CODE Numerator Denominator Error Rate
Type 1 15 10 1.5
Type 2 4 10 0.4
Type 4 0 10 0

等等以进行适当的分组。

我该怎么做?

我用过字典,我用过 isin() 和类型列表,但无济于事。

这是我的示例文件的简化版本:

CODE Power Cycle Panics Temp App Restart
Panic X
Power Reset-Power_Reset-Hard Power X
Power Reset-Hard_Power-Hard Power X
HARD-App-Restart X
Code-Reason Temperature X

10 列 57 行以此类推

CODE Numerator Denominator Error Rate
Power Reset-Power_Reset-Hard Power 6 10 0.6
Panic 4 10 0.4
Power Reset-Hard_Power-Hard Power 9 10 0.9
HARD-App-Restart 0 10 0

对于出现的错误代码的行数,以此类推

期望的输出: |代码|分子|分母|错误率| |----|---------|------------|----------| |电源循环| 15 | 10 | 1.5 | |恐慌| 4 | 10 | 0.4 | |应用重启 | 0 | 10 | 0 |

【问题讨论】:

    标签: python pandas dataframe mapping


    【解决方案1】:

    说第一个数据帧 df1 第二个 df2

    #convert Code to CODE in first dataframe with str.upper for standardization
    df1.CODE = df1.CODE.str.upper()
    
    #replace X with column names and remove nan values
    df1["new"] = df1.filter(like="T").replace("X", pd.Series(df1.columns, df1.columns)).stack().to_numpy()
    
    #replace CODE A,B,C,D,E with Type 1,2,3,4
    df2["CODE"] = df2[["CODE"]].replace(df1[["CODE","new"]].set_index("CODE").to_dict()["new"],regex=True)
    
    

    df2

        CODE    Numerator   Denominator Error Rate
    0   Type 1      6          10         0.6
    1   Type 2      4          10         0.4
    2   Type 1      9          10         0.9
    3   Type 4      0          10         0.0
    

    【讨论】:

    • 谢谢,从那里我可以做一个groupby() 将相似类型的代码合并在一起?
    • 想使用 groupby 吗?这里不需要groupby 这取决于你的问题。我的代码有效吗?有没有我错过的一点?
    • 我还没有让它工作。我的数据框比我包含的示例更健壮,因此我正在尝试针对这一事实进行调整。我还想确保合并相同错误类型的出现。就像代码 B 和代码 C 是同一类型一样,不仅仅是将它们转换为类型,而是将它们的分子相加。在现实生活中,代码 B 类似于“Power Reset-Power_Reset-Hard Power”,代码 C 类似于“Power Reset-Hard_Power-Hard Power”
    • 当我将您的代码应用于我的数据并调整正确的名称时,我收到一个值错误:ValueError: Length of values (35) does not match length of index (56)
    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 2018-08-29
    • 2020-04-18
    • 2018-03-15
    • 2022-10-15
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多