在多索引列上合并pandas数据帧
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在多索引列上合并pandas数据帧相关的知识,希望对你有一定的参考价值。
我想在我的数据帧上应用一个函数,添加有关每个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
答案
您可以使用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,另一个是合规性== 1。然后我将每个数据帧的索引转换为一个列表并将其保存在参数中。现在我采用我的基本数据框并将其与我创建的两个新数据框合并。 merge函数中的“right_on”参数现在等于两个数据帧一侧保存的列表的名称。它的工作原理:)希望这可以帮助某人。
以上是关于在多索引列上合并pandas数据帧的主要内容,如果未能解决你的问题,请参考以下文章