gpt4 book ai didi

Python:保留索引重复以进行拆栈

转载 作者:行者123 更新时间:2023-12-01 06:34:17 24 4
gpt4 key购买 nike

我有以下数据框:

df = pd.DataFrame([['A',1,2],['B',1,5],['A',2,5],['C',1,8],['A',1,5]], columns = ['person','status','result'])
  person  status  result
0 A 1 2
1 B 1 5
2 A 2 5
3 C 1 8
4 A 1 5

我的目标:我需要将人员和状态作为索引并检查每个索引的结果。但是,如果存在索引重复,我想保留它,使状态为 1 的人 A 有 2 个结果 2 和 5

status    1    2
person
A 2.0 5.0
A 5.0
B 5.0 NaN
C 8.0 NaN

我的尝试:

df1.set_index(['person','status'])['result'].unstack()

但这不起作用,因为不允许重复索引。

最佳答案

有点黑客,这里是:

df = pd.DataFrame([['A',1,2],['B',1,5],['A',2,5],['C',1,8],['A',1,5]], columns 
= ['person','status','result'])

df

person status result
0 A 1 2
4 A 1 5
2 A 2 5
1 B 1 5
3 C 1 8


M=(df
.assign(result= lambda x: x.result.astype('str'))
.groupby(['person','status'],as_index=False)
.agg(lambda x: x.str.cat(sep=','))
.pivot(index='person',columns='status')
)

#https://stackoverflow.com/a/55757002/7175713
M.columns = M.columns.to_flat_index()

(M.reset_index()
.assign(exp = lambda x: x[('result',1)].str.split(','))
.explode('exp')
.drop(('result',1),axis=1)
.rename(columns={('result',2):'2','exp':'1'})
.reset_index(drop=True)
.loc[:,['person','1','2']]
)


person 1 2
0 A 2 5
1 A 5 5
2 B 5 NaN
3 C 8 NaN

关于Python:保留索引重复以进行拆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59751004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com