在多索引列上合并pandas数据帧

问题描述 投票:0回答:2

我想在我的数据帧上应用一个函数,添加有关每个id的平均性能的信息。问题是使用apply应用此函数需要花费很多时间(我在20分钟后停止了该过程)并且我需要做几次。所以我想尝试将信息取出到一个新的数据框,然后将两者合并在一起。问题是我的新数据框有multyindex,我正在尝试合并该索引。似乎无法找到办法。有什么建议?

新数据框看起来像这样:

                              compliance_detail
    inspector_name  compliance  
    Addison, Michael    0.0 0.431203
                        1.0 0.034050
    Ahmad, Muna I       0.0 0.731405
                        1.0 0.052342
    Anderson, Trevis    0.0 0.166667

我想合并检查员的名字和合规性,因为我在原始数据框中有这两个。

我希望合并的数据框对每个检查员都有他的合规等级== 0和合规性== 1。所以它看起来像这样:

    ticket_id   inspector_name  positive_complaince negetive_complaince
    0   22056   Addison, Michael 0.034050            0.431203
    1   22057   Ahmad, Muna I    0.052342            0.731405
python pandas merge
2个回答
0
投票

您可以使用unstack重塑数据框。此外,根据您给定的输出,我假设您要删除inspector_name,其中一个合规性(正面或负面)不可用。

## sample data
df = pd.DataFrame({'inspector_name':['Addison, Michael','Addison, Michael','Ahmad, Muna I','Ahmad, Muna I','Anderson, Trevis'],
                   'compliance': [0.0,1.0,0.0,1.0,0.0],
                   'compliance_detail':[0.4312, 0.0340, 0.7314,0.052,0.1666]})

df = df.set_index(['inspector_name','compliance'])

## solution

df = df.unstack().dropna().reset_index()
df.columns = ['inspector_name','negative_complaince','positive_complaince']
df

    inspector_name  negative_complaince     positive_complaince
0   Addison, Michael       0.4312                  0.034
1   Ahmad, Muna I          0.7314                  0.052

0
投票

好的,我找到了答案。不确定它是否是最好的方式,但它的工作原理。首先,我采用新的数据框并将其分成两个数据框,一个是合规性== 0,另一个是合规性== 1。然后我将每个数据帧的索引转换为一个列表并将其保存在参数中。现在我采用我的基本数据框并将其与我创建的两个新数据框合并。 merge函数中的“right_on”参数现在等于两个数据帧一侧保存的列表的名称。它的工作原理:)希望这可以帮助某人。

© www.soinside.com 2019 - 2024. All rights reserved.