gpt4 book ai didi

python - 在 Pandas 中 reshape 数据框

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:38 25 4
gpt4 key购买 nike

假设我有这个数据框:

df = pd.DataFrame({'n':[0 ,1 ,0 ,0 ,1 ,1 ,0 ,1],'l':[12 ,16 ,92, 77 ,32 ,47, 22, 14], 'cols':['col1','col1','col1','col1','col2','col2','col2','col2']})

这就是我想要得到的:

col1    col2
l n l n
12 0 32 1
16 1 47 1
92 0 22 0
77 0 14 1

我一直在尝试使用 set_indexstack/unstack 方法,但没有成功...

最佳答案

import pandas as pd

df = pd.DataFrame(
{'n':[0 ,1 ,0 ,0 ,1 ,1 ,0 ,1],'l':[12 ,16 ,92, 77 ,32 ,47, 22, 14],
'cols':['col1','col1','col1','col1','col2','col2','col2','col2']})

df['index'] = df.groupby(['cols']).cumcount()
result = df.pivot(index='index', columns='cols')
print(result)
# l n
# cols col1 col2 col1 col2
# index
# 0 12 32 0 1
# 1 16 47 1 1
# 2 92 22 0 0
# 3 77 14 0 1

如果您关心 MultiIndex 列中标签的顺序,您可以使用堆叠和取消堆叠以准确重现您发布的结果:

result = result.stack(level=0).unstack(level=1)
print(result)

# cols col1 col2
# l n l n
# index
# 0 12 0 32 1
# 1 16 1 47 1
# 2 92 0 22 0
# 3 77 0 14 1

在寻找解决方案时,向后思考通常很有用。

从所需的 DataFrame 开始,问问自己什么操作可能产生所需的 DataFrame。在这种情况下,想到的操作是 pd.pivot。那么问题就变成了,什么DataFrame,一些东西,需要这样

desired = something.pivot(index='index', columns='cols') 

通过查看 other examples pivot 的作用,很明显 something 必须等于

   cols   l  n  index
0 col1 12 0 0
1 col1 16 1 1
2 col1 92 0 2
3 col1 77 0 3
4 col2 32 1 0
5 col2 47 1 1
6 col2 22 0 2
7 col2 14 1 3

然后你看看是否可以找到一种方法将 df 按摩到 something 中,向后工作,将 something 按摩到 df 中......从这个角度来看,在在这种情况下,缺失的链接变得很明显:something 有一个 indexdf 缺少。

关于python - 在 Pandas 中 reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21637477/

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