【问题标题】:Align DataFrames in pandas so that data matches in rows在 pandas 中对齐 DataFrame,以便数据在行中匹配
【发布时间】:2016-10-26 10:12:45
【问题描述】:

我想对齐我的数据

我现在是这样的:

Yan     TNSeq   Kato    Eco-GeneOrth    Essential

accA    accA    accA        accA        accA    
accB    accB    accB        accB        accB    
accC    accC    accC        accC        accC    
accD    accD    accD        accD        accD    
aceF    acpP    acpP        alaS        aceF    
acpP    acpS    acpS        argA        acpP    
acpS    adk     adk         argB        acpS    

我想要的是这个:

Yan     TNSeq   Kato    Eco-GeneOrth    Essential

accA    accA    accA        accA        accA    
accB    accB    accB        accB        accB    
accC    accC    accC        accC        accC    
accD    accD    accD        accD        accD    
aceF    NaN     NaN         Nan         aceF    
acpP    NaN     Nan         acpP        acpP    
NaN     acpS    NaN         NaN         acpS    

我尝试过重新索引和排序,但没有成功

我一无所知

基本上我想要的是将前 4 列与 Essential 列对齐或排序,以便行中的数据匹配。

【问题讨论】:

    标签: python pandas alignment


    【解决方案1】:

    更新:

    In [120]: df[df.apply(lambda x: x['Essential'] == x, axis=1)]
    Out[120]:
        Yan TNSeq  Kato Eco-GeneOrth Essential
    0  accA  accA  accA         accA      accA
    1  accB  accB  accB         accB      accB
    2  accC  accC  accC         accC      accC
    3  accD  accD  accD         accD      accD
    4  aceF   NaN   NaN          NaN      aceF
    5  acpP   NaN   NaN          NaN      acpP
    6  acpS   NaN   NaN          NaN      acpS
    

    试试这个:

    In [86]: df[df.apply(lambda x: x[0] == x, axis=1)]
    Out[86]:
        Yan TNSeq  Kato Eco-GeneOrth Essential
    0  accA  accA  accA         accA      accA
    1  accB  accB  accB         accB      accB
    2  accC  accC  accC         accC      accC
    3  accD  accD  accD         accD      accD
    4  aceF   NaN   NaN          NaN      aceF
    5  acpP   NaN   NaN          NaN      acpP
    6  acpS   NaN   NaN          NaN      acpS
    

    数据:

    In [87]: df
    Out[87]:
        Yan TNSeq  Kato Eco-GeneOrth Essential
    0  accA  accA  accA         accA      accA
    1  accB  accB  accB         accB      accB
    2  accC  accC  accC         accC      accC
    3  accD  accD  accD         accD      accD
    4  aceF  acpP  acpP         alaS      aceF
    5  acpP  acpS  acpS         argA      acpP
    6  acpS   adk   adk         argB      acpS
    

    【讨论】:

    • 这似乎是对的。不过我不明白 OP 的预期输出。
    • @piRSquared,我认为 OP 想要的 DF 中有一个小错字
    • @MaxU 对不起,如果我没有任何意义,英语不是我的母语。我想要的是将前 4 列与最后一列(基本列)对齐,以便行中的数据匹配,并在数据不匹配的地方留下空格(NaN)
    【解决方案2】:

    IIUC 使用 eq 并使用 arg axis=0 传递您的列,以针对该列创建整个 df 的布尔掩码:

    In [49]:
    df[df.eq(df['Essential'],axis=0)]
    
    Out[49]:
        Yan TNSeq  Kato Eco-GeneOrth Essential
    0  accA  accA  accA         accA      accA
    1  accB  accB  accB         accB      accB
    2  accC  accC  accC         accC      accC
    3  accD  accD  accD         accD      accD
    4  aceF   NaN   NaN          NaN      aceF
    5  acpP   NaN   NaN          NaN      acpP
    6  acpS   NaN   NaN          NaN      acpS
    

    【讨论】:

    • 这行得通,但这不是我想要的。我想对齐数据以使其匹配也许我不清楚。英语不是我的母语我想对数据进行排序,而不是用空格替换它
    • 您的评论是荒谬的你真的需要更好地解释你想要什么,而不是浪费大家的时间
    • 对不起。我不小心按了 Enter 没有完成,我正在编辑评论,但我的速度不够快。对不起,如果它看起来很粗鲁
    • 你是对的,你不清楚你的解释与你想要的输出没有明显的相关性,例如你可以通过编辑你的问题来解释你是如何到达最后两行的,因为它不是明显
    猜你喜欢
    • 2020-04-11
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多